atomic api Example with multiprocessing and multiple threads:: ¶
You need the following steps to utilize the module:
-
create function used by child processes, refer to UIntAPIs , IntAPIs , BytearrayAPIs , StringAPIs , SetAPIs , ListAPIs , in each process, you can create multiple threads. on macOS, before the main process start, please set environment variable OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES, to alliviate Python bug
def process_run(a):
def subthread_run(a):
a.array_sub_and_fetch(b'\x0F')
threadlist = []
for t in range(5000):
threadlist.append(Thread(target=subthread_run, args=(a,)))
for t in range(5000):
threadlist[t].start()
for t in range(5000):
threadlist[t].join()
-
create the shared bytearray
a = atomic_bytearray(b'ab', length=7, paddingdirection='r', paddingbytes=b'012', mode='m')
-
start processes/threads to utilize the shared bytearray
processlist = []
for p in range(2):
processlist.append(Process(target=process_run, args=(a,)))
for p in range(2):
processlist[p].start()
for p in range(2):
processlist[p].join()
assert a.value == int.to_bytes(27411031864108609,length=8,byteorder='big')