Pythonオブジェクトのメソッドとして(直接的に)実装されたときに完全に(無限ループで)動作するPyPyコールバック、Pythonを移動すると約100回繰り返した後のsegfaultsオブジェクトを別のマルチプロセッシングプロセスに変換します。私は、メインコードで〜100回の繰り返し後にCFFI segfaultsからのコールバック
:
import multiprocessing as mp
class Task(object):
def __init__(self, com, lib):
self.com = com # communication queue
self.lib = lib # ffi library
self.proc = mp.Process(target=self.spawn, args=(self.com,))
self.register_callback()
def spawn(self, com):
print('%s spawned.'%self.name)
# loop (keeping 'self' alive) until BREAK:
while True:
cmd = com.get()
if cmd == self.BREAK:
break
print("%s stopped."%self.name)
@ffi.calback("int(void*, Data*"): # old cffi (ABI mode)
def callback(self, data):
# <work on data>
return 1
def register_callback(self):
s = ffi.new_handle(self)
self.lib.register_callback(s, self.callback) # C-call
アイデアは、複数のタスクが同時にコールバックの等しい数を提供すべきであるということです。私はsegfaultを引き起こすかもしれない何かを知りません。特に、最初の〜100回の繰り返しでうまく動作するためです。大いに助けてください!