Weirdo multiprocessing: Shared objects taking more time in sharing smaller data than larger data between multiple processes.
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Bug report
Bug description:
server.py
from multiprocessing.managers import BaseManager
from queue import Queue
queue = Queue()
class QueueManager(BaseManager): pass
QueueManager.register('get_queue', callable=lambda:queue)
m = QueueManager(address=('', 5000), authkey=b'abracadabra')
s = m.get_server()
s.serve_forever()
consumer.py
import time
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager): pass
QueueManager.register('get_queue')
m = QueueManager(address=('', 5000), authkey=b'abracadabra')
m.connect()
queue = m.get_queue()
while True:
t = time.time()
x = queue.get()
producerA.py
from multiprocessing.managers import BaseManager
import time
import numpy as np
class QueueManager(BaseManager): pass
QueueManager.register('get_queue')
m = QueueManager(address=('', 5000), authkey=b'abracadabra')
m.connect()
queue = m.get_queue()
out_img = np.zeros((128, 128, 3), dtype=np.uint8)
for i in range(100):
t = time.time()
queue.put(
{
'type' : 'not working',
'data': out_img
}
)
print('put took', (time.time() - t)*1000)
producerB.py
from multiprocessing.managers import BaseManager
import time
import numpy as np
class QueueManager(BaseManager): pass
QueueManager.register('get_queue')
m = QueueManager(address=('', 5000), authkey=b'abracadabra')
m.connect()
queue = m.get_queue()
out_img = np.zeros((256, 256, 3), dtype=np.uint8)
for i in range(100):
t = time.time()
queue.put(
{
'type' : 'not working',
'data': out_img
}
)
print('put took', (time.time() - t)*1000)
steps to reproduce the issue
- run
server.py - run
consumer.py - run
producerA.pyand check theput timeand compare it withproducerB.pyput time.
put time in producerA.py is higher than producerB.py, however the size of data being send through shared queue objects is more in producerB.py( 256x256 ) than in producerA.py (128x128).
I don't have much context if this is related to numpy or cpython multiprocessing, but this is definitely shouldn't be the case.
Ideally it should take more time in producerB.py beacuase the size of data is relatively higher relative to producerA.py.
This is my first bug report, I'm hoping to learn something...
Thanks everyone...
CPython versions tested on:
3.10
Operating systems tested on:
Linux
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách chạy server.py và consumer.py, sau đó so sánh thời gian chạy của producerA.py và producerB.py trên thiết lập Linux và CPython 3.10 được báo cáo. Theo dõi hành vi qua multiprocessing manager queue và các đường dẫn tuần tự hóa NumPy của CPython. Báo cáo không nêu tệp mã nguồn hay mục tiêu kiểm thử nào, vì vậy để hoàn tất cần xác nhận nguyên nhân và một cách giải quyết phù hợp với dự án.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- numpy, python
- Lĩnh vực
- distributed-systems
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100