Skip to main content
 首页 » 编程设计

python之在python中创建一个处理队列

2025年05月04日18zdz8207

我设置了一个电子邮件帐户,每当它收到电子邮件时都会触发 python 脚本。该脚本执行几个函数,这可能需要大约 30 秒,并将一个条目写入 MYSQL 数据库。

在第一封电子邮件发送后不到 30 秒内发送第二封电子邮件之前,一切都运行顺利。第二封电子邮件被正确处理,但第一封电子邮件在数据库中创建了一个损坏的条目。

我希望保留电子邮件数据,

msg=email.message_from_file(sys.stdin) 

如果脚本尚未处理完前一封电子邮件,则在队列中。

我正在使用 python 2.5。 任何人都可以推荐一个可以完成此任务的包/脚本吗?

请您参考如下方法:

我发现这是一种避免在前一个 cronjob 仍在运行时运行 cronjob 的简单方法。

fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)  

这将引发一个 IOError,然后我通过让进程自行终止来处理它。

参见 http://docs.python.org/library/fcntl.html#fcntl.lockf了解更多信息。

无论如何,您可以轻松地使用相同的想法来一次只允许一个作业运行,这实际上与队列不同(因为任何等待的进程都可能获得锁),但它实现了您的目标想要。

import fcntl 
import time 
fd = open('lock_file', 'w') 
fcntl.lockf(fd, fcntl.LOCK_EX) 
# optionally write pid to another file so you have an indicator 
# of the currently running process 
print 'Hello' 
time.sleep(1) 

你也可以只使用 http://docs.python.org/dev/library/multiprocessing.html#exchanging-objects-between-processes ,这正是您想要的。