2015-04-24 4 views
0

У меня работает приложение wxpython, и мне было интересно, могу ли я запустить другой экземпляр приложения в результате нажатия кнопки при продолжении работы предыдущих?python: запустите процесс многопроцессорности на wxbutton, нажмите

что-то вроде: запустите приложение wxpython -> нажмите на кнопку ->, и событие порождает другой процесс (процесс многопроцессорности), который запускает другой экземпляр этого же приложения, когда первый продолжает работать?

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

def start_new_button(self,event): 
    import multiprocessing 
    worker2 = multiprocessing.Process(name = 'worker2', target = self.new) 
    worker2.start() 
def new(): 
    pass 

он выдает ошибку

Traceback (most recent call last): 
    File "main.py", line 470, in start_new_button 
    worker2.start() 
    File "C:\Python27\lib\multiprocessing\process.py", line 130, in start 
    self._popen = Popen(self) 
    File "C:\Python27\lib\multiprocessing\forking.py", line 277, in __init__ 
    dump(process_obj, to_child, HIGHEST_PROTOCOL) 
    File "C:\Python27\lib\multiprocessing\forking.py", line 199, in dump 
    ForkingPickler(file, protocol).dump(obj) 
    File "C:\Python27\lib\pickle.py", line 224, in dump 
    self.save(obj) 
    File "C:\Python27\lib\pickle.py", line 331, in save 
    self.save_reduce(obj=obj, *rv) 
    File "C:\Python27\lib\pickle.py", line 419, in save_reduce 
    save(state) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 649, in save_dict 
    self._batch_setitems(obj.iteritems()) 
    File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems 
    save(v) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\multiprocessing\forking.py", line 67, in dispatcher 
    self.save_reduce(obj=obj, *rv) 
    File "C:\Python27\lib\pickle.py", line 401, in save_reduce 
    save(args) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 548, in save_tuple 
    save(element) 
    File "C:\Python27\lib\pickle.py", line 331, in save 
    self.save_reduce(obj=obj, *rv) 
    File "C:\Python27\lib\pickle.py", line 419, in save_reduce 
    save(state) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 649, in save_dict 
    self._batch_setitems(obj.iteritems()) 
    File "C:\Python27\lib\pickle.py", line 681, in _batch_setitems 
    save(v) 
    File "C:\Python27\lib\pickle.py", line 331, in save 
    self.save_reduce(obj=obj, *rv) 
    File "C:\Python27\lib\pickle.py", line 419, in save_reduce 
    save(state) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 649, in save_dict 
    self._batch_setitems(obj.iteritems()) 
    File "C:\Python27\lib\pickle.py", line 686, in _batch_setitems 
    save(v) 
    File "C:\Python27\lib\pickle.py", line 331, in save 
    self.save_reduce(obj=obj, *rv) 
    File "C:\Python27\lib\pickle.py", line 396, in save_reduce 
    save(cls) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 748, in save_global 
    (obj, module, name)) 
pickle.PicklingError: Can't pickle <type 'PySwigObject'>: it's not found as __bu 
iltin__.PySwigObject 
C:\Python27\lib\site-packages\mpltools\style\__init__.py:42: FutureWarning: 

    The style-sheet functionality in mpltools has been integrated into 
    Matplotlib >= 1.4. This module will be removed in a future release. 

    Note that style-sheets used by `matplotlib.style` use the standard 
    Matplotlib rc-file syntax instead of the INI format used by `mpltools`. 
    This mostly means un-quoting strings and changing '=' to ':'. 


    """, FutureWarning) 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "C:\Python27\lib\multiprocessing\forking.py", line 381, in main 
    self = load(from_parent) 
    File "C:\Python27\lib\pickle.py", line 1378, in load 
    return Unpickler(file).load() 
    File "C:\Python27\lib\pickle.py", line 858, in load 
    dispatch[key](self) 
    File "C:\Python27\lib\pickle.py", line 880, in load_eof 
    raise EOFError 
EOFError 

Я собираюсь на правильный путь?

Iam использованием Python 2.7 с Wx 3.0.2.0 на окнах 7

ответ

2

Python multiprocessing использует pickle модуль для передачи информации в новом процессе. Документация pickle описывает, what can be pickled and unpickled. С помощью self.new вы пытаетесь передать метод экземпляра, который не может быть маринован.

Попробуйте пропусканием метод не-инстанс multiprocessing.Process():

class YourButtonClass: 
    def start_new_button(self,event): 
     import multiprocessing 
     worker2 = multiprocessing.Process(name = 'worker2', target = new) 
     worker2.start() 

def new(): 
    pass 
+0

О да! что делает мои вещи еще проще! большое спасибо!! – Deepa

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

  • Нет связанных вопросов^_^