[fix] 修改过程

This commit is contained in:
li.zhenye 2022-08-23 19:41:16 +08:00
parent c6d544334c
commit a42a2c023c
2 changed files with 21 additions and 2 deletions

View File

@ -461,3 +461,21 @@ def __setstate__(self, state):
就是在序列化之前把不能序列化的stateful_things收起来把`_stop_event`这个线程间同步用的东西也给收起来,然后就可以复制类内所有的变量新的独立的进程运行了,新的进程会拥有自己进程内独立的`_stop_event`这就导致我们其实已经失去了对于这个新开辟的子进程的控制除非它自己调用自己的self.stop。
好了,我觉得这个地方有点蠢,之后再改。
不对经过我的实验我发先函数在调用self.stop后依然生效这太神奇了不过我想了一下还是因为主进程死了所以子进程也死了并不会有什么别的原因。
问题大的地方在于这里:
> 2022-08-23 15:49:57,770 - root - INFO - 测试子进程文件接收器
> 2022-08-23 15:49:58,870 - root - INFO - Spent 59.68ms to get image with shape (1024, 4096, 3)
> 2022-08-23 15:49:59,886 - root - INFO - Spent 56.07ms to get image with shape (1024, 4096, 3)
> 2022-08-23 15:50:00,932 - root - INFO - Spent 84.52ms to get image with shape (1024, 4096, 3)
> 2022-08-23 15:50:01,966 - root - INFO - Spent 97.37ms to get image with shape (1024, 4096, 3)
> 2022-08-23 15:50:02,969 - root - INFO - Spent 78.12ms to get image with shape (1024, 4096, 3)
😮💨这个速度属实是拉胯上网查了以后发现python的进程间通信(ipc)是个大问题,从2014年到2021年关于这个队列慢的提问从来不停。
![image-20220823160026017](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/image-20220823160026017.png)

View File

@ -8,6 +8,7 @@ import transmit
from config import Config
from transmit import FileReceiver, FifoReceiver, FifoSender
from utils import ImgQueue
from quick_queue.quick_queue import QQueue
class TransmitterTest(unittest.TestCase):
@ -33,7 +34,8 @@ class TransmitterTest(unittest.TestCase):
def test_file_receiver_subprocess(self):
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logging.info('测试子进程文件接收器')
image_queue = multiprocessing.Queue()
# image_queue = multiprocessing.Queue()
image_queue = QQueue()
file_receiver = FileReceiver(job_name='rgb img receive', input_dir='../data', output_queue=image_queue,
speed=1, name_pattern=None, run_process=True)
virtual_data = np.random.randint(0, 255, (1024, 4096, 3), dtype=np.uint8)
@ -64,7 +66,6 @@ class TransmitterTest(unittest.TestCase):
input_queue.put(virtual_data)
logging.debug('put data to input queue done')
virtual_data = image_queue.get()
# logging.info(f'Spent {(current_time - time_record) * 1000:.2f}ms to get image with shape {virtual_data.shape}')
self.assertEqual(virtual_data.shape, (1024, 4096, 3))