Python - 每个任务都从.txt文件中读取每个名称(多处理)

时间:2018-02-27 14:20:52

标签: python text multiprocess

所以我一直在使用多处理工作,最后让它与多处理一起工作 - 基本上现在我让它运行所以每个任务现在都运行,这取决于我输入的任务数量。

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阅读第三行等等......

对此最好的解决办法是什么?

2 个答案:

答案 0 :(得分:1)

你不能这样做。在多处理上,每个进程都有自己的非共享状态。

因此每个进程都会要求操作系统打开该文件。每个进程都将从头开始读取文件。您可以强制每个进程只处理一些行,但每个进程都需要读取所有行,以查找它们的起始位置和结束位置,以计算行数。

您的示例不是应该在多进程中完成的,而是使用服务器(提供行),并且每个多进程都要求服务器提供新行。但这比多进程算法更像服务器客户端。或者“异步”或使用线程(不确定读取是否为原子,因此可能会使事情变得更复杂。)

答案 1 :(得分:-1)

您可以使用将行分配到子流程的过程来执行此操作。如果您使用的是UNIX系统,则应该查找os.fork()os.pipe()