2010-01-07 4 views
2

je suis stress test 2 projets différents: l'un est proxsmtpd - proxy smtp écrit en C Et l'autre, smtp_proxy.py, que j'ai développé sous 1 heure, avec l'utilisation d'asyncore et smtpd modules python.Python asyncore vs plaine vieux C

I ont souligné les deux projets sous une lourde charge, et a découvert que proxsmtpd est capable de tenir 400 séances de smtp/sec, alors que mon programme python, est capable de faire seulement 160 sessions smtp/s. Donc, ma question est, est-ce parce qu'il y a des limitations de performance en asyncore, ou les programmes en C sont juste plus rapides? Ou peut-être c'est moi, en utilisant asyncore de manière inefficace?

+0

Si vous êtes plutôt novice avec Python, il est assez sûr que vous faites des choses de manière inefficace. Les nouveaux venus sur Python écrivent souvent des choses de style C, en répétant les caractères individuels dans les chaînes, sans utiliser efficacement les primitives Python, travaillant généralement à un niveau trop bas. Sauf si vous êtes sûr que votre approche est "Pythonique" et efficace, la suggestion de Noufal de profiler est bonne: faites-le et si vous ne savez pas pourquoi le code le plus lent est si lent, postez une mise à jour avec du code. –

Répondre

2

je pense qu'il est raisonnable d'envisager que, étant donné une bonne version C et une bonne Python version, la version C sera plus rapide et plus évolutive, mais dans votre cas, vous pouvez lancer un profileur et pourquoi et où votre programme ne se redimensionne pas autant que la version C. Peut-être que vous pouvez découvrir les points sensibles et l'optimiser pour extraire plus de performance de votre code. En outre, je ne connais pas grand-chose de l'asyncore, mais la première bibliothèque de Python semble attirer les gens quand ils veulent faire des trucs asynchrones. Donc, peut-être y a-t-il une amélioration des performances là-bas.