我在Python 2.7中使用多处理来处理非常大的数据集.当每个进程运行时,它会将整数添加到共享的mp.Manager.Queue(),但前提是其他进程尚未添加相同的整数.由于你不能对队列进行"in"式成员资格测试,我这样做的方法是检查每个int是否为共享mp.Manager.list()中的成员资格.该列表最终将有大约3000万个条目,因此成员资格测试将非常缓慢,从而使多处理的优势无效.
这是我正在做的简化版本:
import multiprocessing as mp
def worker(shared_list, out_q, lock):
# Do some processing and get an integer
result_int = some_other_code()
# Use a lock to ensure nothing is added to the list in the meantime
lock.acquire()
# This lookup can take forever when the list is large
if result_int not in shared_list:
out_q.put(result_int)
shared_list.append(result_int)
lock.release()
manager = mp.Manager()
shared_list = manager.list()
lock = manager.lock()
out_q = manager.Queue()
for i in range(8):
p = mp.Process(target=worker, args=(shared_list, out_q, lock))
p.start() …Run Code Online (Sandbox Code Playgroud) 在 C# 中,我有一个StringBuilder sb我在 for 循环中多次附加到它。
是否有一种简单的方法StringBuilders可以吐出附加到它的最后一个字符串?