所以我一直在使用多处理工作,最后让它与多处理一起工作 - 基本上现在我让它运行所以每个任务现在都运行,这取决于我输入的任务数量。
def main():
user_input = 0
while True:
try:
user_input = int(input(Fore.WHITE + 'How many tasks do you wanna run? [NUMBERS] \n' + Fore.RESET))
except ValueError:
print(Fore.RED + "Stop being stupid" + Fore.RESET)
continue
else:
HowManyThread = user_input
print()
i = 0
jobs = []
for i in range(HowManyThread):
p = multiprocessing.Process(target=info, args=(str(i),))
jobs.append(p)
time.sleep(.5)
p.start()
for p in jobs:
p.join()
sys.exit()
但是我正在查看其他stackoverflow线程并找到
with open(fname) as f:
content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]
我在fname等处拥有所有姓名:
巴里 亚历克斯 斯文 米拉 珍妮等等......
然而,多处理程序正在做的事情是,它实际上为每个任务读取相同的内容,而我现在无法掌握现在该做什么......
基本上我想做的就是等......
任务1读取第一行 任务2阅读第二行 任务3阅读第三行等等......
对此最好的解决办法是什么?
答案 0 :(得分:1)
你不能这样做。在多处理上,每个进程都有自己的非共享状态。
因此每个进程都会要求操作系统打开该文件。每个进程都将从头开始读取文件。您可以强制每个进程只处理一些行,但每个进程都需要读取所有行,以查找它们的起始位置和结束位置,以计算行数。
您的示例不是应该在多进程中完成的,而是使用服务器(提供行),并且每个多进程都要求服务器提供新行。但这比多进程算法更像服务器客户端。或者“异步”或使用线程(不确定读取是否为原子,因此可能会使事情变得更复杂。)
答案 1 :(得分:-1)
您可以使用将行分配到子流程的过程来执行此操作。如果您使用的是UNIX系统,则应该查找os.fork()
和os.pipe()
。