1
Python / Re : Thread très lent
« le: Août 26, 2013, 04:51:52 pm »
Je déteste devoir me renseigner sur les forums et faire perdre du temps, mais là je bloque... Vraiment.
Je suis toujours sur cette histoire de thread/multiprocessing.
Globalement, mon multiprocessing fonctionne. Mais c'est juste que ça n'a pas l'air compatible avec les vertexArray. C'est plus que certains que je ne sais pas utiliser correctement ces multiprocess.
J'ai essayé avec les queues, les pipes, etc... (sans mauvais jeu de mot ) mais je fini toujours avec un crash.
En gros, le multiprocessing gère les vertex. C'est juste qu'il n'arrive pas à les retourner correctement.
Un petit exemple que j'ai testé avec avec le pool async
La sortie :
Est-ce qu'il y a une méthode particulière à utiliser? J'ai pensé au ctypes, mais ça m'a eu l'air assez complexe. Alors avant que je perde encore 1 semaine sur mon projet, je me demandais si c'est réalisable avec ça. Ou sinon avec quoi?
Merci (again)
Je suis toujours sur cette histoire de thread/multiprocessing.
Globalement, mon multiprocessing fonctionne. Mais c'est juste que ça n'a pas l'air compatible avec les vertexArray. C'est plus que certains que je ne sais pas utiliser correctement ces multiprocess.
J'ai essayé avec les queues, les pipes, etc... (sans mauvais jeu de mot ) mais je fini toujours avec un crash.
En gros, le multiprocessing gère les vertex. C'est juste qu'il n'arrive pas à les retourner correctement.
Un petit exemple que j'ai testé avec avec le pool async
import sfml as sf
from multiprocessing import Pool
def process():
mp_vertexArray = sf.VertexArray(sf.PrimitiveType.QUADS)
# imaginons un remplissage de mp_vertexArray
return mp_vertexArray
if __name__ == '__main__' :
# juste un test pour s'assurer ce qu'on connait deja
test_vertexArray = sf.VertexArray(sf.PrimitiveType.QUADS)
print test_vertexArray, "position, c'est bon!"
print type(test_vertexArray), "type, c'est bon!"
print len(test_vertexArray), "taille, c'est bon!"
print "-------------------------------"
# multiprocessing
pool = Pool()
res = pool.apply_async(process)
vertexArray = res.get()
# sortie du mutiprocessing
print vertexArray, "position, c'est bon!"
print type(vertexArray), "type, c'est bon"
print len(vertexArray) # devrait retourner 0! Au lieu de ca, c'est un joli crash! Ouch...
from multiprocessing import Pool
def process():
mp_vertexArray = sf.VertexArray(sf.PrimitiveType.QUADS)
# imaginons un remplissage de mp_vertexArray
return mp_vertexArray
if __name__ == '__main__' :
# juste un test pour s'assurer ce qu'on connait deja
test_vertexArray = sf.VertexArray(sf.PrimitiveType.QUADS)
print test_vertexArray, "position, c'est bon!"
print type(test_vertexArray), "type, c'est bon!"
print len(test_vertexArray), "taille, c'est bon!"
print "-------------------------------"
# multiprocessing
pool = Pool()
res = pool.apply_async(process)
vertexArray = res.get()
# sortie du mutiprocessing
print vertexArray, "position, c'est bon!"
print type(vertexArray), "type, c'est bon"
print len(vertexArray) # devrait retourner 0! Au lieu de ca, c'est un joli crash! Ouch...
La sortie :
Citer
<sfml.graphics.VertexArray object at 0x0051F1D0> position, c'est bon!
<type 'sfml.graphics.VertexArray'> type, c'est bon!
0 taille, c'est bon!
-------------------------------
<sfml.graphics.VertexArray object at 0x0051F330> position, c'est bon!
<type 'sfml.graphics.VertexArray'> type, c'est bon
[Finished in 2.9s with exit code -1073741819]
Est-ce qu'il y a une méthode particulière à utiliser? J'ai pensé au ctypes, mais ça m'a eu l'air assez complexe. Alors avant que je perde encore 1 semaine sur mon projet, je me demandais si c'est réalisable avec ça. Ou sinon avec quoi?
Merci (again)