Python 3 中模块线程和多处理的使用是否相互排斥?
Are the use of module threading and multiprocessing mutually exclusive in Python 3?
- https://docs.python.org/3/library/threading.html
- https://docs.python.org/3/library/multiprocessing.html
- Python: what are the differences between the threading and multiprocessing modules?
在 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。塞巴斯蒂安
- https://docs.python.org/3/library/threading.html
- https://docs.python.org/3/library/multiprocessing.html
- Python: what are the differences between the threading and multiprocessing modules?
在 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。塞巴斯蒂安