2017-07-01 17 views
1

私はPythonのための鳥です。私はいくつかのファイルを翻訳したいので、私はPythonのシェルを記述します。それは動作しません、私は結果を印刷します。私は間違ってコードが動作しますが、失敗を翻訳すると思う。私はそれが動作していないか分からない。Pythonのマルチプロセッシング

<multiprocessing.pool.ApplyResult object at 0x102ee3990> 
<multiprocessing.pool.ApplyResult object at 0x102ee3a10> 
<multiprocessing.pool.ApplyResult object at 0x102ee3ad0> 



#!/usr/bin/env python 
#coding=utf-8 

from multiprocessing import Pool 
from googletrans import Translator 
import os 
import sys 
import re  
import urllib,urllib2 
from time import time 
reload(sys) 
sys.setdefaultencoding("utf-8") 


def Gtranslate(pregs): 
    filepath='./test/' 
    pathDir = os.listdir(filepath) 
    for allDir in pathDir: 
     filename = os.path.join('%s%s' % (filepath, allDir)) 
     content = open(filename,'r').read() 
     for preg in pregs: 
      rex=re.search(preg,content) 
      if rex: 
       translator = Translator() 
       res=translator.translate(rex.group(1), dest='zh-CN').text 
       content = re.sub(preg,rex.group().replace(rex.group(1),res),content) 
       print res 

     with open(filename,'w+') as f: 
      f.write(content) 


def main(): 
    pool = Pool(processes=4) 
    partterns = ("script_name\s*\(\s*english\s*:\s*\"([\s\S]*?)\"\s*\)\s*;","script_set_attribute\s*\(\s*attribute\s*:\s*\"\s*solution\s*\"\s*,\s*value\s*:\s*\"([\s\S]*?)\"\s*\)\s*;","script_set_attribute\s*\(\s*attribute\s*:\s*\"\s*description\s*\"\s*,\s*value\s*:\s*\"([\s\S]*?)\"\s*\)\s*;") 

    for par in partterns: 
     result = pool.apply_async(Gtranslate, (par,)) 
     print result 
     print par 
    pool.close() 
    pool.join() 
    if result.successful(): 
     print 'successful' 


if __name__ == "__main__": 
    t1=time() 
    main() 
    print "cost time is: {:.2f}s".format(time() - t1) 

答えて

0

AsyncResultから生じるAsyncResult.getを呼び出して取得するには:

for par in partterns: 
    result = pool.apply_async(Gtranslate, (par,)) 
    print par, result.get() 

しかし、これは並列実行を防ぐことができます。

代わりにサブプロセスに提出されたすべてのパターンの後AsyncResult.getを呼び出して、非同期の結果を収集します。

async_results = [] 
for par in patterns: 
    result = pool.apply_async(Gtranslate, (par,)) 
    async_results.append((par, result)) 
for par, result in async_results: 
    print par 
    print result.get() 
+0

ありがとうございました!問題は解決しました! – Fade

+0

@nansun、どうぞよろしくお願いします。ハッピーパイソンプログラミング。 – falsetru

関連する問題