在Python 3中使用模块线程和多处理是否互斥?

时间:2015-01-12 20:52:50

标签: python multithreading python-3.x multiprocessing

在Linux上使用Python 3.4

我是并行编程的新手,我在为特定方法运行threading.Threads()时遇到问题,而对另一个方法运行模块multiprocessing.Process()。当另一个方法被注释掉时,两种方法都可以正常工作。这两种方法都与其他方法无关(例如,没有尝试共享数据)。但是当我拥有它们时,两个都不运行,一切都冻结了。据我所知,多处理似乎锁定了。我假设同样的事情适用于线程。

所以第一步是断言这是否可行?

(我有一种感觉,你们中的一些人会问这个原因......在多处理工作繁重时,线程会进行简单的捕获用户密钥检查)

我提供了一个示例(更像是伪代码)来帮助说明如何使用这些方法。

文件t.py

import threading

Class T:

    Def __init__():
        t = threading.Thread(target = self.ThreadMethod)
        t.daemon = True
        t.start()

    Def ThreadMehod():
        # capture key

文件m.py

import multiproceessing

Class M:

    Def __init__():
        mp = multiprocessing.Process(target = self.ProcessMethod)
        mp.start()

    Def ProcessMethod():
        # heavy lifting

文件main.py

import T
import M

Class main:

  Def __init__():
     T()

  Def DoTheProcess()
     for i in range(5):
       M()

1 个答案:

答案 0 :(得分:0)

"没有。线程和多处理并不是相互排斥的。虽然存在已知的问题(例如,存在atfork的原因)限制了它们如何一起使用。" - J.F. Sebastian