python的Pool进程池管理,没有报错,但是也没有反应
import os
from multiprocessing import Process, Queue, Manager, Pool
from time import sleep
class Process_save_data_into_queue(Process):
def __init__(self, queue_name, index, list_name, dictionary_name):
super().__init__()
self.dictionary_name = dictionary_name
self.list_name = list_name
self.index = index
self.queue_name = queue_name
def __str__(self):
return f"\"进程:{os.getpid()}\""
def __del__(self):
print(f"{self.name}已销毁!!")
def run(self):
print(f"子进程:{os.getpid():*^100},开始!")
while self.queue_name.full() is False:
print(f"子进程:{os.getpid()},正在存放数据{self.index}")
self.queue_name.put(obj=self.index, block=False, timeout=3)
self.index += 1
print(
f"队列\"{f'{self.queue_name}'[1:len('multiprocessing.queues.Queue') + 1]}\"存储的数据量:{self.queue_name.qsize()}")
print("传入作为参数的列表对象:", self.list_name)
print("传入作为参数的字典对象:", self.dictionary_name)
print(f"子进程:{os.getpid():*^100},结束!")
class Process_get_data_from_queue(Process):
def __init__(self, queue_name):
super().__init__()
self.queue_name = queue_name
def __str__(self):
return f"\"进程:{os.getpid()}\""
def __del__(self):
print(f"{self.name}已销毁!!")
def run(self):
print(f"子进程:{os.getpid():*^100},开始!")
while self.queue_name.empty() is False:
print(f"子进程:{os.getpid()},正在获取数据{self.queue_name.get()}")
print(
f"队列\"{f'{self.queue_name}'[1:len('multiprocessing.queues.Queue') + 1]}\"存储的数据量:{self.queue_name.qsize()}")
sleep(2)
print(f"子进程:{os.getpid():*^100},结束!")
if __name__ == '__main__':
queue_test = Queue(maxsize=10)
management = Manager()
a_dictionary = management.dict()
a_list = management.list()
a_list.append([number for number in range(0, 100)])
a_dictionary["品牌"] = "劳斯莱斯"
task1 = Process_save_data_into_queue(queue_name=queue_test, index=0, dictionary_name=a_dictionary, list_name=a_list)
task2 = Process_get_data_from_queue(queue_name=queue_test)
pool = Pool(processes=2)
pool.apply_async(func=task1.run, args=(), callback=task2.run)
pool.apply_async(func=task1.run, args=(), callback=task2.run)
pool.close()
pool.join()
除了返回删除的提示信息,进程池的管理和执行代都没有运行,就是这两行
pool.apply_async(func=task1.run, args=(), callback=task2.run)
pool.apply_async(func=task1.run, args=(), callback=task2.run)
网上没有查到类似问题的解决办法
希望pool.apply_async这部分代码能以进程池管理的方式运行task1.run()和task2.run()