Issue 30994: Asyncore does not need to copy map.items() before polling (original) (raw)

Created on 2017-07-23 00:15 by Nir Soffer, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 2819 closed nirs,2017-07-23 00:28
Messages (5)
msg298880 - (view) Author: Nir Soffer (Nir Soffer) Date: 2017-07-23 00:15
Asyncore is not thread safe, and cannot be called from multiple threads. Hence it does not need to copy the socket_map when preparing for poll or select. The copy was introduced in: commit d74900ebb5a22b387b49684990da1925e1d6bdc9 Author: Josiah Carlson <josiah.carlson@gmail.com> Date: Mon Jul 7 04:15:08 2008 +0000 Committing Py3k version of changelist 64080 and 64257, along with updated tests for smtpd, which required updating with the new semantics. This is a huge patch, looks like port of asyncore to python 3, trying to keep the behavior of the python 2 code. Converting map.items() to list(map.items()) is correct, but on python 3 we can take advantage of the fact that items() does not copy anything.
msg298905 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2017-07-23 13:09
Why it may be ok to avoid the copy, what is the advantage of applying the change? The current code is correct.
msg299029 - (view) Author: Nir Soffer (Nir Soffer) Date: 2017-07-24 23:03
The advantage is avoiding wasteful copy on each iteration.
msg299031 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2017-07-24 23:16
asyncore is now deprecated and I prefer to restrict changes to minimum to avoid regressions. While the change makes sense, it only looks like a very cheap micro-optimization. I don't think that it's worth it.
msg299129 - (view) Author: Nir Soffer (Nir Soffer) Date: 2017-07-25 18:29
Using a quick test with 1000 clients sending 1000000 pings, I could not see significant difference between master and this patch. Seems that the extra copy is hidden by the noise. Having this documented is good enough if someone want to use this.
History
Date User Action Args
2022-04-11 14:58:49 admin set github: 75177
2017-07-25 18:29:54 Nir Soffer set status: open -> closedmessages: + stage: resolved
2017-07-24 23:16:06 vstinner set messages: +
2017-07-24 23:03:44 Nir Soffer set nosy: + Nir Soffermessages: +
2017-07-23 13:09:20 vstinner set nosy: + vstinnermessages: +
2017-07-23 06:44:45 Kevin williams set nosy: - vstinner, giampaolo.rodola, Nir Soffer -> (no value)
2017-07-23 00:28:26 nirs set pull_requests: + <pull%5Frequest2872>
2017-07-23 00:15:19 Nir Soffer create