【问题标题】:python threading/fork?python线程/分叉?
【发布时间】:2023-03-19 19:02:01
【问题描述】:

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

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

【问题讨论】:

标签: python multithreading multiprocess


【解决方案1】:

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

要查看使用多处理而不是线程的性能增益,请查看this link,了解使用多处理 x 线程的同一程序的平均时间比较。

【讨论】:

  • 遗憾的是,当子函数的参数不可腌制或腌制时非常大时,多处理模块似乎是一个非常糟糕的解决方案。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 1970-01-01
    • 2013-04-27
    • 2011-09-28
    • 2021-05-31
    • 2010-11-30
    • 2016-09-25
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多