如何解决这种使用过程的并发代码是否本质上不是顺序的-Pyhon多过程?
在尝试理解多处理的并发性时,我编写了以下代码,该代码在多个进程之间共享对--ignore-certificate-errors
的读写:
Queue
产生:
import time
from multiprocessing import Process,Queue,Pool
class QueueFun():
def writing_queue(self,work_tasks):
while True:
print("Writing to queue")
work_tasks.put(1)
time.sleep(.5)
def read_queue(self,work_tasks):
while True:
print('Reading from queue')
work_tasks.get()
time.sleep(.5)
if __name__ == '__main__':
q = QueueFun()
work_tasks = Queue()
processes = []
write_processes = []
read_processes = []
for i in range(0,3):
write_processes.append(Process(target=q.writing_queue,args=(work_tasks,)))
for i in range(0,3):
read_processes.append(Process(target=q.read_queue,)))
for p in write_processes:
p.start()
for p in read_processes:
p.start()
print('Joining write_processes')
for p in write_processes:
print('Joining thread',p)
p.join()
print('Joining read_processes')
for p in read_processes:
p.join()
在我手动杀死线程之前。
我对Joining write_processes
Joining thread <Process name='Process-1' pid=2432 parent=2430 started>
Writing to queue
Reading from queue
Writing to queue
Writing to queue
Reading from queue
Reading from queue
的理解是join()
导致主线程等待t.join()
完成。因此,这实际上不是顺序调用,因为我需要在调用下一个线程之前等待每个线程完成。我的目标是并行执行这些过程中的每个过程,但是看来它们是按顺序执行的?如何同时开始t
和write_processes
的列表?
更新:
read_processes
的代码未处理,因为未将'Joining read_processes'打印到控制台。但是,“从队列读取”已打印到控制台,因此功能print('Joining read_processes')
已启动。为什么跳过代码read_queue
?因此,当t.join()导致主线程等待t完成时,join()阻止了主线程,它不会阻止其他线程启动吗?
解决方法
线程。join()是一个阻塞调用(用于调用线程),等待线程完成后再继续。因此,在join()之后启动的每个任务都将与已连接的线程相继。在您的示例中,它不会使您的过程按顺序进行。 您的进程是一个接一个地启动的,这很正常,但这并不意味着它们不是并行执行的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。