Weirdo multiprocessing: Shared objects taking more time in sharing smaller data than larger data between multiple processes.
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece executando server.py e consumer.py e, em seguida, compare os tempos de producerA.py e producerB.py na configuração informada de Linux e CPython 3.10. Rastreie o comportamento pela multiprocessing manager queue e pelos caminhos de serialização do NumPy no CPython. O relatório não nomeia nenhum arquivo-fonte nem alvo de teste, portanto a conclusão exige uma causa confirmada e uma resolução apropriada para o projeto.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- numpy, python
- Domínio
- distributed-systems
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100