1

マルチプロセッシングに問題があります。あなたの下にコードがあります(彼はいくつかのクラスとファイルにありますが、私はそれを単純化しました)。その問題は、マルチプロセッシングで乗算したいパスメソッド名にあると思います。
情報: "args" は [(0,1),(1,2),(2,3)] のようなリストなので、(0,1) のような単一の "arg" です。この 2 つのファイルはまったく別の calatogs にあり
ます。 !最初のファイル!!

from ... import EF
from ... import someclass

class performs():
    def action():
        for i, arg in enumerate(args):
            data.append(EF(self.method,list(arg),i))
        someclass.create_processes(*data)

    def method(self,fa,la):
        ...

!!2番目のファイル!!

from multiprocessing import Process,Event
class EF(object):
    def __init__(self,name,args=list(),proc=1):
        self.name=name
        self.args=args
        self.proc=proc

class someclass:
    @staticmethod
    def create_processes(*functions):
        processes=dict()
        for function in functions:
            process=Process(target=function.name,args=function.args)
            process.start()
            processes[process.pid]=process
        for process in processes.values():
            process.join()

私がデバッグしているとき、プログラムがこの命令「process.start()」を実行すると、エラーが発生します

コンソール:

File "C:\Python32\lib\multiprocessing\forking.py", line 371, in main
    self = load(from_parent)
AttributeError: 'performs' object has no attribute 'function'

または他の状況で

File "C:\Python32\lib\multiprocessing\process.py", line 267, in _bootstrap
    self.run()
  File "C:\Python32\lib\multiprocessing\process.py", line 116, in run
    self._target(*self._args, **self._kwargs)
  File "...\performs.py", line 88, in method
...

重要なことはわかりませんが、64ビットシステムがあり、32ビット用のPythonとアクセサリをインストールしました

4

1 に答える 1

0

これにはコメント ボックスが小さすぎますが、コードは正常に動作しているようです。私はそれを2つのファイル(あなたの環境のように)にコピーしてテストしましたが、もちろん単一のファイルでも動作します. そのファイルは以下にあります: 期待どおりに動作しています (print ステートメントの出力が混同されていることを除けば、これは予想されることです)。

では、おそらく、あなたの問題は別の場所にあるのでしょうか? エラーは、この質問に記載されているように、おそらくいくつかの包含順序を示しているようです?

from multiprocessing import Process,Event

class EF:
    def __init__(self, name, args=list(), proc=1):
        self.name = name
        self.args = args
        self.proc = proc

class someclass:
    @staticmethod
    def create_processes(*functions):
        processes=dict()
        for function in functions:
            process=Process(target=function.name,args=function.args)
            process.start()
            processes[process.pid]=process
        for process in processes.values():
            process.join()

class performs:
    def action(self, args):
        data = []
        for i, arg in enumerate(args):
            data.append(EF(self.mult, list(arg), i))
        someclass.create_processes(*data)

    def mult(self,fa,la):
        print '%d x %d = %d' % (fa, la, fa * la)

if __name__ == '__main__':
    p = performs()
    p.action([(x, x+1) for x in xrange(10)])
于 2012-10-19T11:19:56.807 に答える