Межпроцессное взаимодействие multiprocessing python

Всех приветствую, это снова я. Итак, у меня есть код, который я хочу ускорить. Код действует по шагам, а именно:

  1. Скачать через API zip-файлы(от 1 до 10, в зависимости от того, сколько опубликовал ресурс). Если не опубликовано ничего - работа завершается.
  2. Извлечь необходимые файлы из архива и удалить сам архив.
  3. Обработать и изменить файлы.
  4. Опубликовать их на ресурс. Проблема в том, что при полностью последовательном выполнении до тех пор, пока не завершится предыдущая задача, следующая не начинает работу.

Пробовал настроить multiprocessing без межпроцессного взаимодействия, однако в этом случае все процессы стартуют одновременно. Так как файлы еще не скачаны - второй, третий и четвертый процесс считают, что ничего не опубликовано и завершают свою работу. Проблема в частном случае решается time.sleep, код работает быстрее, но это костыли и только частный случай. По совету местных товарищей я полез в тему межпроцессного взаимодействия и у джуна закипели мозги. Все примеры рассчитаны на запуск в процессе функции и аргументами или на то, что результатом будет какой-нибудь объект, который знаком пайтону. В общем, хелп!!!! Подскажите, пожалуйста, как заставить это все работать, если в результатом выполнения функции является файл в нужной директории. Кусок кода для примера:

import sys
import glob, os
import datetime
import time
import multiprocessing
from multiprocessing import Process, Pool
import walk

start_time = time.time()

startDate = sys.argv[1]
finishDate = sys.argv[2]

os.system('python3 /var/www/html/algorithm/tiles/delete_all.py')

def step1():
    os.system('python3 /var/www/html/algorithm/tiles/download_all.py '+startDate+' '+finishDate)
    return files

def step2(files):
    os.chdir("/var/www/html/algorithm/tiles")
    for file in glob.glob("*.zip"):
        print(file)
        os.system('unzip /var/www/html/algorithm/tiles/'+file)
        os.system('rm /var/www/html/algorithm/tiles/'+file)
def main():
    p1 = Process(target=step1)
    p1.start()

    p2 = Process(target=step2)
    p2.start()

    p1.join()
    p2.join()


if __name__ == '__main__':
    main()
    

print("Number of cpu : ", multiprocessing.cpu_count())

os.system('python3 /var/www/html/algorithm/tiles/delete_all.py ')

print("--- %s seconds ---" % (time.time() - start_time))

Ответы (0 шт):