2013-09-17 4 views
0

Я использую Python 2.7. Я хочу создать экземпляр объекта и вызвать метод внутри него в отдельном процессе. Что-то вроде этого:Подпроцессы Python: вызов метода экземпляра

import subprocesss 
class A 
    def doAwork(self, text): 
     print text 

class B 
    def doBWork 
     aInst = A() 
     subprocess(A.dowork("called from doBwork")) 

Можно ли это сделать, или, мне нужно, чтобы развернуться и позвонить питона как subprocesss?

Редактировать: Я не могу использовать потоки для этого. Метод, вызываемый в aInst, на самом деле загружает не-поточную безопасную dll.

Благодаря

ответ

0

subprocess используется для создания процесса (EXE на окнах), а не функцию. В этом случае, вы можете использовать темы:

import thread 

class A: 
    def doAwork(self, text): 
     print text 

class B: 
    def doBwork(self): 
     aInst = A() 
     thread.start_new_thread(aInst.doAwork, ("called from doBwork",)) 

B().doBwork() 
+0

Я не могу сделать нить. Мне особенно нужны отдельные процессы, потому что фактический код загружает dll, который не является потокобезопасным. Я обновлю этот вопрос, чтобы отразить это требование. –

1

Вы должны использовать multiprocessing модуль вместо subprocess

Простой пример, скопированный из ссылка на документацию выше:

from multiprocessing import Process 

def f(name): 
    print 'hello', name 

if __name__ == '__main__': 
    p = Process(target=f, args=('bob',)) 
    p.start() 
    p.join() 

С вашим примером это будет выглядеть l ike:

from multiprocessing import Process 

class A: 
    def doAwork(self, text): 
     print text 

class B: 
    def doBweork(self): 
     aInst = A() 
     p = Process(target=aInst.doAwork("called from doBWork") 
     p.start() 
     p.join() 
+0

Возможно, я мог бы более подробно описать мою оригинальную проблему. Но на самом деле я звоню в этот класс из C++ через заголовок python.h и PyImport_ImportModule() и т. Д. Это действительно странно. Но, когда я вызываю p.start(), как указано выше, создается другой экземпляр моего вызывающего exe. –

+0

Не так ли? Я думал, вы хотите, чтобы код выполнялся в другом (суб) процессе. – TobiMarg

+0

У меня есть C++ exe, создающий экземпляр python. Экземпляр python должен развернуться и создать новый процесс для выполнения кода python. Вместо этого запускается новый C++ exe, так что у меня есть 2 из них вместо нового процесса, выполняющего aInst.doWork() –

Смежные вопросы