main.py
import multiprocessing.pool as Pool
from test import set_data, get_multiprocessing
if __name__ == '__main__':
data_list = ['data1', 'data2', 'data3']
set_data(data_list)
res = get_multiprocessing(2)
print(res)
test.py
import time
import multiprocessing
_t = None
def set_data(t):
time.sleep(1)
global _t
_t = t
def get_data(idx):
return _t[idx]
def get_multiprocessing(num_threads):
pool = multiprocessing.Pool(processes=num_threads)
res = pool.map(get_data, range(1))
pool.close()
pool.join()
return [r for r in res]
我想要等这个全局变量赋值之后再进行多进程,有什么办法吗?
向大佬们请教
和线程不同,进程间不能共享全局变量,也不共享对象,进程间只能通过共享内存、管道、信号量、事件等手段通讯。如果题主一定要进程间共享这个全局变量,恐怕只能像下面的代码一样将全局变量作为参数传进去——这已经不是共享对象,而是副本传参了。
import time
import multiprocessing as mp
_t = None
def set_data(t):
time.sleep(1)
global _t
_t = t
def get_data(arg):
arr, idx = arg
return arr[idx]
def get_multiprocessing(num_threads):
pool = mp.Pool(processes=num_threads)
res = pool.map(get_data, ((_t,0),(_t,1),(_t,2)))
pool.close()
pool.join()
return list(res)
if __name__ == '__main__':
data_list = ['data1', 'data2', 'data3']
set_data(data_list)
res = get_multiprocessing(2)
print(res)