2016-10-30 4 views
0

Это, наверное, очень простой ответ, но я новичок в создании собственного приложения и пакетов на основе python. Я довольно хорошо знаком с такими языками, как C++ и C# и их библиотеками.Структура приложения Python с 2 магистралями/процессами

Я пытаюсь построить пакет python, который я за исключением, чтобы работать как простой исполняемый файл. У меня есть поддерживающие модули для этого приложения, которые являются просто классами, которые получают экземпляр и вызываются. Однако у меня есть проблема. У меня есть две основные функции. Моя причина заключается в том, что у меня есть одна часть программы, которая состоит из простого цикла, который создает экземпляр одного из классов, а затем дает конкретные сведения об этом классе (ввод в него и т. Д.). Я создаю экземпляр Popen с вызовом python smartinterface.py 'и smartinterface.py содержит другую основную функцию. Мне интересно, как я мог бы структурировать это лучше всего. Должен ли я создать два разных пакета и выяснить, как связать мои модули, содержащие классы, поскольку оба процесса зависят от одних и тех же классов или я делаю что-то неправильно с Popen?

ответ

1

Попробуйте что-нибудь подобное.

import asyncio, random 


loop = asyncio.get_event_loop() 

@asyncio.coroutine 
def second_task(): 
    while True: 
     yield from asyncio.sleep(0.5 + random.random()) 

@asyncio.coroutine 
def main_task(): 
    while True: 
     # do somthing 
     loop.create_task(consume()) 


loop.create_task(main_task()) 
loop.run_forever() 

Другой пример использования очереди задач (я думаю, что это лучше):

import asyncio, random 

task_queue = asyncio.Queue() 

@asyncio.coroutine 
def task_producer(): 
    while True: 
     yield from task_queue.put(random.random()) 
     yield from asyncio.sleep(random.random()) 

@asyncio.coroutine 
def task_consumer(): 
    while True: 
     value = yield from task_queue.get() 
     print("returne value: ", value) 


loop = asyncio.get_event_loop() 
loop.create_task(task_producer()) 
loop.create_task(task_consumer()) 
loop.run_forever() 
+0

Я понимаю, что очень хорошо, и я использую это. У меня есть первый файл с именем startmonitor.py, который работает нормально. Однако эта программа вызывает мой smartinterface.py с Popen, который также содержит основную функцию. startmonitor.py - это, по сути, процесс, который я хочу постоянно проверять (скажем, файл), и когда у файла есть необходимые требования, разверните еще один процесс, запускающий другой скрипт, который я хочу, чтобы этот сценарий был в состоянии закончить и возобновил возобновление работы. Единственный чистый способ, который я видел для этого, - создать другой процесс. Это можно сделать другими способами, но я чувствую, что они не умны – SDSMTKyzer