# -*- coding:utf-8 -*-
from multiprocessing import Process, Manager
import time
import random
import numpy as np
import openslide
from multiprocessing.managers import BaseManager
from multiprocessing.pool import Pool
class A:
def __init__(self, slide):
self.slide = slide
def get_data(self):
return self.slide
class MyManager(BaseManager):
pass
MyManager.register('A', A)
def kkk(a_list, coordi_list, slide_path, h, w, number):
slide = openslide.OpenSlide(slide_path)
for y_start, patch_h, i in coordi_list:
# a_list[i] = np_arr[i]
# a_list[i] = np.array(slide.read_region((0, j), 0, (w, 100)))[:,:,:3]
a_list[i] = np.array(slide.read_region((0, y_start), 0, (w, patch_h)))[:, :, :3]
# time.sleep(random.randrange(2))
print('这是进程{} 坐标{} {}'.format(number, y_start, patch_h))
# print('这是进程{} {}'.format(number, a_list[i]))
# print('这是进程{} {}'.format(number, a_list))
def jjj(a_list, coordi_list, slide_path, h, w, num_workers):
for i in range(num_workers):
process = Process(target=kkk, args=(a_list, coordi_list[i], slide_path, h, w, i))
process.start()
if __name__ == '__main__':
start_time = time.time()
slide_path = r"D:\test_multiprocess_ndpi\a.ndpi"
slide = openslide.OpenSlide(slide_path)
w, h = slide.level_dimensions[0]
every_h = 2000
num_workers = 4
h_stride = h // every_h
h_retain = h - every_h*h_stride
coordis = []
for i in range(h_stride):
coordis.append([i * every_h, every_h, i])
if h_retain > 0:
coordis.append([every_h*h_stride, h_retain, h_stride])
all_worker_coordis = []
every_worker_num = len(coordis) // num_workers
for i in range(num_workers):
if i == num_workers-1:
all_worker_coordis.append(coordis[i*every_worker_num:])
else:
all_worker_coordis.append(coordis[i * every_worker_num:(i+1) * every_worker_num])
# np_arr = np.random.randint(10, size=(len(coordis), w))
# a = np.zeros((h,w), dtype=np.uint8).tolist()
manager = Manager()
# manager2 = MyManager()
a_list = manager.list(coordis)
coordi_list = manager.list(all_worker_coordis)
# new_slide = A(slide)
# new_slide = manager2.A(slide)
# a_list = []
process_0 = Process(target=jjj, args=(a_list, coordi_list, slide_path, h, w, num_workers))
process_0.start()
process_0.join()
# print(a_list[:5][:10])
print(len(a_list))
print('it\'s ok')
print(time.time() - start_time)
# # -*- coding:utf-8 -*-
# from multiprocessing import Process, Manager
# import time
# import random
# def kkk(a_list, number):
# for i in range(10):
# a_list.append(np.array([i]))
# time.sleep(random.randrange(2))
# print('这是进程{} {}'.format(number, a_list))
# print('这是进程{} {}'.format(number, a_list))
# def jjj(a_list):
# for i in range(2):
# process = Process(target=kkk, args=(a_list, i))
# process.start()
# if __name__ == '__main__':
# manager = Manager()
# a_list = manager.list()
# # a_list = []
# process_0 = Process(target=jjj, args=(a_list,))
# process_0.start()
# process_0.join()
# print(a_list)
# print(len(a_list))
# print('it\'s ok')
【Python】多进程读取openslide数据
猜你喜欢
转载自blog.csdn.net/u013066730/article/details/114090360
今日推荐
周排行