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

Are the use of module threading and multiprocessing mutually exclusive in Python 3?

在 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()

"no. threading and multiprocessing are not mutually exlusive. Though there are known issues (e.g., the reason for atfork existance) that constrain how they can be used together." - J.F。塞巴斯蒂安