多处理,包含事件的共享对象
Multiprocessing, shared object which contains events
我想共享一个标志对象,该对象将包含多个 multiprocessing.event 对象以与 Multiprocessing 创建的多个 python 进程进行通信。
这行得通吗?
您可以执行如下操作。 Class Foo
在内部创建一个 multiprocessing.Event
对象的列表(在本例中只有 1 个对象用于演示目的)并且 Foo
的一个实例被传递给两个进程:
from multiprocessing import Process, Event
import time
class Foo:
def __init__(self):
self.lst = []
self.lst.append(Event())
def worker1(foo):
event = foo.lst[0]
t = time.time_ns()
print('Waiting for event to be set...')
event.wait()
print('Wait satisfied, elapsed time =', (time.time_ns() - t) / 1_000_000_000.0)
def worker2(foo):
event = foo.lst[0]
time.sleep(2)
event.set()
def main():
foo = Foo()
p1 = Process(target=worker1, args=(foo,))
p2 = Process(target=worker2, args=(foo,))
p1.start()
p2.start()
p1.join()
p2.join()
if __name__ == '__main__':
main()
打印:
Waiting for event to be set...
Wait satisfied, elapsed time = 2.0112978
我想共享一个标志对象,该对象将包含多个 multiprocessing.event 对象以与 Multiprocessing 创建的多个 python 进程进行通信。
这行得通吗?
您可以执行如下操作。 Class Foo
在内部创建一个 multiprocessing.Event
对象的列表(在本例中只有 1 个对象用于演示目的)并且 Foo
的一个实例被传递给两个进程:
from multiprocessing import Process, Event
import time
class Foo:
def __init__(self):
self.lst = []
self.lst.append(Event())
def worker1(foo):
event = foo.lst[0]
t = time.time_ns()
print('Waiting for event to be set...')
event.wait()
print('Wait satisfied, elapsed time =', (time.time_ns() - t) / 1_000_000_000.0)
def worker2(foo):
event = foo.lst[0]
time.sleep(2)
event.set()
def main():
foo = Foo()
p1 = Process(target=worker1, args=(foo,))
p2 = Process(target=worker2, args=(foo,))
p1.start()
p2.start()
p1.join()
p2.join()
if __name__ == '__main__':
main()
打印:
Waiting for event to be set...
Wait satisfied, elapsed time = 2.0112978