Python - как читать текстовый файл xxx раз и добавлять в многопроцессный режим, если добавлен новый текст - PullRequest
0 голосов
/ 20 ноября 2018

Так что в основном я пытаюсь сделать что-то, что я не уверен, возможно ли это сделать или нет.

Моя идея состоит в том, что я использую многопроцессорность, что означает, что он выполняет отдельный процесс на заднем плане для каждой выполненной «задачи».Аналогично:

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 будет использовать первую строку в текстовом файле и2-й процесс будет использовать второе имя и т. Д.

Мой вопрос - как мне двигаться дальше и иметь возможность проверить время names.txt xxx и проверить , если есть добавлено новое имя, затем добавьте его в новый процесс и , если нет новых имен , затем просто продолжите процесс и снова спите до следующего xxxвремя, когда другой процесс работает в фоновом режиме ?

1 Ответ

0 голосов
/ 21 ноября 2018

Быстрый и грязный способ сделать это.Я не исследовал, есть ли способ запросить элемент в списке заданий для его атрибута «args».

Остерегайтесь того, что он неправильно обрабатывает случай, когда после завершения этого процесса добавляется повторяющееся имявыполнения.Вам нужно будет найти способ удалить законченные процессы из списка используемых имен.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...