4

我正在制作一个需要同时做 3 件事的 python 脚本。什么是实现这一目标的好方法,就像我听说的关于 GIL 的事情一样,我不再那么倾向于使用线程了。
脚本需要做的两件事将非常活跃,他们将有很多工作要做,然后我需要在用户询问时通过套接字向用户报告第三件事(所以它会像一个很小的服务器)关于其他 2 个进程的状态。
现在我的问题是什么是实现这一目标的好方法?我不想拥有三个不同的脚本,而且由于 GIL 使用线程,我认为我不会获得太多性能,而且我会让事情变得更糟。
是否有一个 fork() for python 像在 C 中那样从我的脚本中分叉 2 个进程来完成他们的工作并从主进程向用户报告?以及如何从分叉进程与主进程进行通信?

LE: : 更准确地说,1thread 应该从 imap 服务器获取电子邮件并将它们存储到数据库中,另一个线程应该从 db 获取需要发送的消息然后发送它们,主线程应该是一个微型 http 服务器,它将只需接受一个 url,就会以 json 格式显示这两个线程的状态。那么线程好吗?工作会同时完成还是由于 gil 会出现性能问题?

4

2 回答 2

4

我认为您可以使用具有类似于 threading 包的 API的multiprocessing包,并允许您在单个 CPU 上使用多个内核获得更好的性能。

要查看使用多处理而不是线程的性能增益,请在此链接上查看有关使用多处理 x 线程的同一程序的平均时间比较。

于 2010-01-23T13:33:55.100 回答
2

如果您想进行多处理,GIL 真的只是需要关心的事情,即将负载分散到多个内核/处理器上。如果是这种情况,并且从您的描述中听起来有点像,请使用多处理。

如果您只需要以需要在后台等待事情发生的方式“同时”做三件事,那么线程就可以了。这就是线程最初的用途。8-I)

于 2010-01-23T14:47:50.510 回答