Параллельный запуск двух кодов python из двух разных каталогов с использованием многопроцессорной обработки - PullRequest
0 голосов
/ 29 мая 2020

Ниже приведен мой код для параллельного запуска двух кодов python с использованием многопроцессорности:

defs.py

import os 

def pro(process):      
    #print(process)                                                       
    os.system('python {}'.format(process)) 

Multiprocessing.py

import os                                                                       
from multiprocessing import Pool
import multiprocessing as mp
import defs
import datetime
import pandas as pd

processes = ('python_code1.py','python_code2.py')

if __name__ == '__main__':                                                                                
    pool = Pool(processes=4)
    start = datetime.datetime.now()
    print('Start:',start)   
    pool.map(defs.pro, processes)
    end = datetime.datetime.now()
    print('End :',end)   
    total = end-start
    print('Total :', end-start)

Это код работает отлично. Но мое требование - мне нужно запустить код python 'python_code1.py' и 'python_code2.py' из двух разных каталогов.

, поэтому я внес следующие изменения в Multiprocessing.py:

path1 = r'C:\Users\code1\python_code1.py'
path2 = r'C:\Users\code2\python_code2.py'

processes = (path1,path2) 

, но у меня это не работает.

Мои Multiprocessing.py и defs.py хранятся по пути `C: \ Users \ Multiprocessing \ '

1 Ответ

0 голосов
/ 29 мая 2020

Элегантное решение с использованием asyncio . Он используется в качестве основы для нескольких асинхронных сред Python, которые обеспечивают высокопроизводительные сетевые и веб-серверы, библиотеки подключения к базам данных, распределенные очереди задач и т. Д. c. Кроме того, он имеет как высокоуровневые, так и низкоуровневые API для решения любых проблем. И вы можете найти синтаксис проще, чем я:

import os
import asyncio
    def background(f):
        def wrapped(*args, **kwargs):
            return asyncio.get_event_loop().run_in_executor(None, f, *args, **kwargs)

        return wrapped

    @background
    def pro(process):      
    #print(process)                                                       
    os.system('python {}'.format(process)) 

processes = (r'C:\Users\code1\python_code1.py',r'C:\Users\code2\python_code2.py')
for process in processes:
    pro(process)

Подробный ответ о распараллеливании для l oop. Может оказаться полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...