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

Python - Every tasks read each names from .txt file (Multiprocessing)

所以我一直在使用 multiprocessing 并最终让它与 multiprocessing 一起工作 - 基本上现在我得到它 运行 所以现在每个任务 运行s 取决于我输入的任务数量.

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()

但是我正在查看其他 Whosebug 线程并发现

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

最好的解决方案是什么?

你做不到。在多进程中,每个进程都有自己的 non-shared 状态。

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

你的例子不应该在多进程中完成,而是通过服务器(服务行)和每个多进程向服务器请求一个新行。但这比多进程算法 server-client 多得多。或 'async' 或使用线程(不确定读取是原子的,因此可能会使事情变得更复杂。)

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