事件驱动的线程创建

时间:2011-07-17 12:29:11

标签: python multithreading consumer producer

我一直在尝试各种解决方案以解决以下问题;无济于事。

我有大量(python)模块/脚本和一个杰出的脚本,K.py。

执行K.py时,会生成一些信息,例如国家/地区名称。现在,在其他模块(数百个)中,将有一些模块可以使用由K.py生成的信息(例如国家名称)作为输入传递给它们。递归地,上面的每个模块将生成一些信息(城镇名称,街道号码等),可以作为其他模块的输入,等等。 这当然会导致执行脚本的二叉树。

注意事项。

  • 上面的模块/脚本(数百个)可以独立运行(它们不以任何方式相互依赖)
  • 我应该能够在所有模块完成执行时做出判决(运行K.py必须阻止,直到触发的异常模块的二叉树被“加入”)。

  • 如果,对于每个信息I和runnable脚本S(也就是说,S可能以I作为输入运行),我决定创建一个新的线程,我可能最终得到一个指数线程(不是吗?)

如何使用python线程(任何API)“安全”实施解决方案? (pseudo_code?)

提前感谢您的智慧。

1 个答案:

答案 0 :(得分:2)

解决此问题的常用方法是创建工作队列并在那里存储单个作业。因此,您需要对一个线程应该完成的工作进行某种编程表示。

如果你有,你可以使用提供“线程”池的multiprocessing package(见16.3.1.5。)和多线程队列来存储作业。

现在每个进程从队列中获取一个作业,执行它 - 可能会向队列添加新作业 - 并且当它完成时接受下一个作业。当队列为空时你就完成了。

请注意,这使用了多处理程序包,因为至少在带有GIL的CPython中,多线程python程序仅在大型IO或其他阻塞活动的情况下才有用。