定义的c语言类型,如c_double
ctypes
其中的Structure
对象创建的自定义结构体, c_doubleelapsed time: 0.50s elapsed time: 1.02s OK
1
elapsed time: 0.50s elapsed time: 1.02s OK
2
为了更加方便的在主进程获取到子进程中的数据,我们可以,下例就是一个例子.
elapsed time: 0.50s elapsed time: 1.02s OK
3
elapsed time: 0.50s elapsed time: 1.02s OK
4
之前介绍了queue,pipe,array和value,这些都太具体底层,有没有什么方法可以像处理python容器一样简单地处理数据共享的问题呢?multiprocess提供一个manager模块.
Manager()返回的manager对象控制了一个server进程,此进程包含的python对象可以被其他的进程通过proxies来访问.从而达到多进程间数据通信且安全。
Manager支持的类型有
elapsed time: 0.50s elapsed time: 1.02s OK
5
elapsed time: 0.50s elapsed time: 1.02s OK
6
namespace对象没有公共的方法,但是有可写的属性
elapsed time: 0.50s elapsed time: 1.02s OK
7
elapsed time: 0.50s elapsed time: 1.02s OK
8
类似在多线程中控制子线程,我们使用os.kill(pid,sig)
来控制子进程.
elapsed time: 0.50s elapsed time: 1.02s OK
9
def crypto_process(size, key): in_text = bytearray(randrange(256) for i in range(size)) cypher_text = arcfour(key, in_text) out_text = arcfour(key, cypher_text) assert in_text == out_text, 'Failed arcfour_test' return size def main(workers=None): JOBS = 12 SIZE = 2**18 KEY = b"'Twas brillig, and the slithy toves\nDid gyre" STATUS = '{} workers, elapsed time: {:.2f}s' if workers: workers = int(workers) t0 = time() with ProcessPoolExecutor(workers) as executor: actual_workers = executor._max_workers to_do = [] for i in range(JOBS, 0, -1): size = SIZE + int(SIZE / JOBS * (i - JOBS/2)) job = executor.submit(crypto_process, size, KEY) to_do.append(job) for future in as_completed(to_do): res = future.result() print('{:.1f} KB'.format(res/2**10)) print(STATUS.format(actual_workers, time() - t0))
0
]宙飒天下网-ZhouSa.com
还没有评论,来说两句吧...