Я пишу программу, которая будет следить за определенным каталогом в поисках новых файлов, содержащих URL-адреса загрузки. Как только новый файл будет обнаружен, он создаст новый процесс для фактической загрузки, в то время как родительский элемент будет продолжать следить за каталогом. Я использую интерфейс Process
из multiprocessing
. У меня проблема в том, что если я не вызываю process.join (), дочерний процесс все еще работает, но process. join () - это блокирующая функция, которая побеждает цель создания дочернего процесса для обработки фактической загрузки.
Мой вопрос: есть ли способ присоединиться к дочернему процессу неблокирующим образом, который позволит родителю сохранить делает свое дело?
Частичный код:
def main(argv):
# parse command line args
...
# set up variables
...
watch_dir(watch_dir, download_dir)
def watch_dir(wDir, dDir):
# Grab the current watch directory listing
before = dict([(f, None) for f in os.listdir (wDir)])
# Loop FOREVER
while 1:
# sleep for 10 secs
time.sleep(10)
# Grab the current dir listing
after = dict([(f, None) for f in os.listdir (wDir)])
# Get the list of new files
added = [f for f in after if not f in before]
# Get the list of deleted files
removed = [f for f in before if not f in after]
if added:
# We have new files, do your stuff
print "Added: ", ", ".join(added)
# Call the new process for downloading
p = Process(target=child, args=(added, wDir, dDir))
p.start()
p.join()
if removed:
# tell the user the file was deleted
print "Removed: ", ", ".join(removed)
# Set before to the current
before = after
def child(filename, wDir, dDir):
# Open filename and extract the url
...
# Download the file and to the dDir directory
...
# Delete filename from the watch directory
...
# exit cleanly
os._exit(0)
Родитель ждет, пока дочерний элемент закончит выполнение, прежде чем продолжить после p.join ()
, что (насколько я могу судить) правильно. Но это противоречит самой цели создания ребенка. Если я оставлю p.join ()
, тогда дочерний элемент останется активным и ps ax | grep
python дайте мне 'python
Я бы хотел, чтобы ребенок закончил то, что он делает, и ушел, не поддерживая родителя. Есть ли способ сделать это?