【发布时间】:2018-06-12 11:40:14
【问题描述】:
所以,这几天我一直在玩 Python 的 multiprocessing 模块,但有些东西我无法理解。也许有人可以给我一点帮助。
我正在尝试从同一类并行运行两个方法,但显然我缺少一些东西:
from multiprocessing import Process
import time
class SomeClass:
def __init__(self):
pass
def meth1(self):
print(1)
time.sleep(10)
def meth2(self):
print(2)
time.sleep(5 * 60)
def main():
while True:
s = SomeClass()
p1 = Process(target=s.meth1) # I want this to run from 10 to 10 seconds
p1.start()
p2 = Process(target=s.meth2) # I want this to run from 5 to 5 minutes
# while the first one still does its own
# job from 10s to 10s
p2.start()
p1.join()
p2.join()
if __name__ == '__main__':
main()
我期望发生的是:
- 第一种方法应该打印
1; - 然后第二个应该打印
2(无需等待 10 秒 - 这确实发生并且似乎按预期工作); - 那么我应该在接下来的 4 分钟和 50 秒内只看到 1 秒(这不会发生,程序只是等待那个时间过去。
我错过了什么?为什么第二步按预期工作,但第三步没有?我怎样才能让它发挥作用?
【问题讨论】:
-
@wp78de 如果您能想到更好的标题,请随时编辑标题^^
-
meth1只打印一次1。您为什么希望它继续这样做? -
@user2357112 因为
while True?应该每 10 秒打印一次1:) -
您是否希望
while循环每 10 秒运行一次meth1?该循环等待两个进程完成。它必须等待meth2完成才能运行另一个meth1。 -
循环不会等待 p1 完成,直到它已经启动 p2。它会等待两个进程完成,然后再启动新的一批两个进程。
标签: python python-3.x multiprocessing