2014-09-02 2 views
-2
#coding:utf-8 

import sys 
import time 
import os 
import multiprocessing 

class Worker(object): 
    def __init__(self): 
     self.progress = 0 
     self.task_info = None 

    def init(self): 
     pass 

    def status(self): 
     pass 

    def set_task_info(self, task_info): 
     self.task_info = task_info 

    def run(self, worker_status_meta_dict): 
     print multiprocessing.current_process() 
     print "process is %d" % self.progress 
     while self.progress < 5: 
      self.progress = self.progress +1 
      worker_status_meta_dict['state'] = 0 
      worker_status_meta_dict['status'] = "running" 
      time.sleep(2) 
     worker_status_meta_dict['state'] = 1 
     worker_status_meta_dict['status'] = "succeeded" 
     print "bavscan worker finished..."  

if __name__ == "__main__": 
    worker = Worker() 
    worker_process_dict = multiprocessing.Manager().dict() 
    process = multiprocessing.Process(target=Worker.run, args=(worker, worker_process_dict)) 
    process.start() 
    time.sleep(60) 

Это простая демонстрация для многопроцессорного процесса python. Основной процесс вызывает метод Worker.run в подпроцессе с многопроцессорной обработкой. Когда вы запускаете его в wondows 7, основной процесс будет выполнять два подпроцесса.процесс обработки многопроцессорных процессов python

enter image description

+0

Что вы хотите сказать? – greole

+0

Я только lautch один подпроцесс, но есть два подпроцесса. – billow

+0

Выведенный вами результат не соответствует вашему коду - строки '' process is ... "' должны быть. Выполните точно код, который вы указали, и покажите результат. –

ответ

0

Я нахожу эту проблему в "python27 \ Lib \ multiprocessing__init __. Ру"

def Manager(): 
    ''' 
    Returns a manager associated with a running server process 

    The managers methods such as `Lock()`, `Condition()` and `Queue()` 
    can be used to create shared objects. 
    ''' 
    from multiprocessing.managers import SyncManager 
    m = SyncManager() 
    m.start() 
    return m 

m.start() будет Lauch подпроцесс для запуска менеджера.