import threading
from multiprocessing import Process, Manager
def child_func(name, queue):
result = name
queue.put(result)
def thread_func(queue):
p1 = Process(target=child_func, args=("Child 1", queue))
p2 = Process(target=child_func, args=("Child 2", queue))
p1.start()
p2.start()
p1.join()
p2.join()
results = []
while not queue.empty():
result = queue.get()
print(result)
results.append(result)
print("Thread finished.")
return results
if __name__ == '__main__':
manager = Manager()
queue = manager.Queue()
t = threading.Thread(target=thread_func, args=(queue,))
t.start()
t.join()
results = []
while not queue.empty():
result = queue.get()
results.append(result)
print("Main process finished.")
print("Results:", results)
但是无法获取到返回值
用回调函数改进后
import threading
from multiprocessing import Process, Manager
def child_func(name, queue):
result = name
queue.put(result)
def thread_func(callback,queue):
p1 = Process(target=child_func, args=("Child 1", queue))
p2 = Process(target=child_func, args=("Child 2", queue))
p1.start()
p2.start()
p1.join()
p2.join()
# results = []
# while not queue.empty():
# # result = queue.get()
# # print(result)
# callback(queue)
print("Thread finished.")
# return results
def callback(queue):
# 从队列中获取结果
results = []
while not queue.empty():
result = queue.get()
results.append(result)
print(f"The result is {result}")
return results
if __name__ == '__main__':
manager = Manager()
queue = manager.Queue()
# t = threading.Thread(target=thread_func, args=(queue,))
t = threading.Thread(target=thread_func, args=(callback,queue,))
t.start()
t.join()
results = []
# while not queue.empty():
# result = queue.get()
# results.append(result)
results = callback(queue)
print("Main process finished.")
print("Results:", results)