私はこのような状況を持っています:
メインプロセスは、結果を文字列型と数値型の共有オブジェクトに書き込むサブプロセスを生成します。数値型には問題はありませんが、文字列では値が失われます。
import multiprocessing as mp
from ctypes import Structure, c_double, c_wchar_p, c_int
# shared obj class
class SharedObj(Structure):
_fields_ = [('name', c_wchar_p), ('val', c_double) ]
def run_mp( values , lock , s ) :
for i in range( s , len( values ) , 2 ):
lock.acquire()
values[i].name = str( i ) # write the string value in the shared obj
values[i].val = float( i )
print( "tmp: %d" % i )
lock.release()
def main():
# creating the shared obj and mutex
values = mp.Array( SharedObj , [SharedObj() for i in range( 10 )] )
lock_j = mp.Lock()
# creating two sub-process form the function run_mp
p1 = mp.Process( target=run_mp , args=( values , lock_j , 0 ))
p2 = mp.Process( target=run_mp , args=( values , lock_j , 1 ))
p1.start()
p2.start()
p1.join()
p2.join()
for v in values:
print()
print( "res name: %s" % v.name )
print( "res val: %f " % v.val )
if __name__ == '__main__':
main()
その結果、c_double を含む共有オブジェクトのフィールドがフィールドに書き込まれますが、サブプロセス rum-mp( string values[i].name = str( i )
) で生成された文字列はメイン プロセスで失われます。
サブプロセスで生成された文字列を保存する方法はありますか?
このコードの出力は次のようになります。
メインプロセスで結果として得られる文字列は完全にランダムです。
tmp: 0
tmp: 2
tmp: 3
tmp: 4
res name: ����羍����羍
res val: 0.000000
res name: ����羍����羍
res val: 1.000000
res name:
res val: 2.000000 ....