作业:在N
中对{0, 1}
个整数进行采样,为CPU N_i
分配“采样i
个整数”。 N = N_1 + ... + N_m
。这是Python的实现,其中N = 16, m = 4; N_1, N_2, N_3, N_4 = 1, 2, 3, 10
。
import multiprocessing as mp
import time
from random import sample
def func(Library, Timer, nums, pid, t0):
# proc: pid, sample size: nums[pid]
sub_Lib = []
while True:
time.sleep(1)
i = sample(range(2), 1)[0]
Library.append(i)
sub_Lib.append(i)
# self job finished
if len(sub_Lib) == nums[pid]:
Timer[pid] = round(time.time()-t0, 2)
break
# ult job finished
if len(Library) == sum(nums):
Timer[pid] = round(time.time()-t0, 2)
break
pass
pass
def run_process():
Library = mp.Manager().list()
Timer = mp.Manager().dict()
nums = [1, 2, 3, 10]
t0 = time.time()
procs = []
for pid, num in enumerate(nums):
proc = mp.Process(target=func, args=(Library, Timer, nums, pid, t0))
procs.append(proc)
pass
for proc in procs:
proc.start()
pass
for proc in procs:
proc.join()
pass
result = 'Ints: {}\nTime: {}'.format(Library, Timer)
print(result)
pass
def main():
run_process()
pass
if __name__ == '__main__':
main()
pass
请注意,第四步比其他第三步需要更多的时间。有没有办法命令完成的过程来帮助未完成的过程?感谢您的任何帮助,谢谢。