Python-如何每隔xxx次读取txt文件并在添加新文本的情况下将其添加到多进程中

时间:2018-11-20 11:24:18

标签: python multithreading process multiprocessing

所以基本上我正在尝试做一些我不确定是否可以做的事情。

我的想法是我正在使用多处理程序,这意味着它会针对每个完成的“任务”在后台运行其独立的进程。类似于:

names.txt

Oskar Baldwin
Khalil Whittle
Jevon Burn
Paddy Wilkinson
Jocelyn Weiss
Ishaq Glenn
Zahraa Macfarlane
Marianna Roy
Humera Schultz
Luther Pugh

import json, time, sys, os, timeit, random, multiprocessing.dummy, re
import threading


def main(names):
    print(names)
    time.sleep(5)


if __name__ == '__main__':

    try:
        jobs = []
        for names in [line.rstrip('\n') for line in open('names.txt')]:
            p = multiprocessing.dummy.Process(target=main, args=(names,))
            jobs.append(p)
            p.start()

    except KeyboardInterrupt:
        print('Keyboard - Interrupted)
        sys.exit()

因此,此输出将是每个进程将自己处理每个名称,因此进程1将使用txt文件中的第一行,第二个进程将使用第二个名称,依此类推。

我的问题是我该如何继续操作并能够检查名称。txtxxx时间并检查是否有添加了新名称,然后将其添加到新过程如果没有新名称,则只需继续该过程并再次休眠,直到另一个xxx时间,而另一个过程为在后台运行

1 个答案:

答案 0 :(得分:1)

快速而肮脏的方式。我没有研究是否可以查询作业列表中的“ args”属性。

请注意,在该过程完成执行之后添加重复名称的情况下,它不能正确处理。您必须想出一种方法来从used_names列表中删除完成的过程。

jobs = []
used_names = []
for i in range(0, 10): # repeat as often as necessary
    try:
        for names in [line.rstrip('\n') for line in open('names.txt')]:
            if names not in used_names: # dont spawn new process if one already exists
                p = multiprocessing.dummy.Process(target=main, args=(names,))
                jobs.append(p)
                used_names.append(p)
                p.start()
        time.sleep(0.1) # arbitrary sleep

    except KeyboardInterrupt:
        print('Keyboard - Interrupted')
        sys.exit(0)