classification
Title: os.fork() command distributed in windows Python27 (in SocketServer module)
Type: behavior Stage: resolved
Components: Documentation Versions: Python 3.6, Python 3.5, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: docs@python Nosy List: Sam Lobel, antvalencia, davin, docs@python, eryksun, gregory.p.smith, martin.panter, paul.moore, python-dev, r.david.murray, steve.dower, supriyanto maftuh, tim.golden, zach.ware
Priority: normal Keywords:

Created on 2015-12-23 03:10 by Sam Lobel, last changed 2016-06-03 20:27 by berker.peksag. This issue is now closed.

Messages (12)
msg256896 - (view) Author: Sam Lobel (Sam Lobel) Date: 2015-12-23 03:10
I ran into this bug while using multiprocessing in Flask, which deep down uses the SocketServer.py module.

There's a call to os.fork() in the windows version , which obviously doesn't work. So SocketServer.py can't be used on windows.

Maybe replace it with something from the multiprocessing module?
msg256898 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2015-12-23 03:40
Starting a Windows process is expensive. Who not use threading, e.g. SocketServer.ThreadingTCPServer? 

It seems to me that it's a bug to even define ForkingMixIn, ForkingTCPServer, and ForkingUDPServer on Windows. Those should be conditionally defined depending on the existence of os.fork.
msg266845 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2016-06-01 23:44
They aren't currently defined conditionally, though, and haven't ever been, so I'm not sure it is worth chaning that.  However, we should probably add an 'availability' line, since they aren't (effectively) available on Windows.
msg266999 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-06-03 00:16
New changeset d772400a1211 by Gregory P. Smith in branch 'default':
Issue #25931: Don't defining socketserver.Forking* names on platforms such
https://hg.python.org/cpython/rev/d772400a1211
msg267001 - (view) Author: Gregory P. Smith (gregory.p.smith) * (Python committer) Date: 2016-06-03 00:19
I made the change to not export the Forking names on Windows or other non-os.fork() supporting platforms in 3.6 only as it is arguably an API change, even though the names it removes would effectively be unusable on those platforms anyways.

the docs still need updating.
msg267005 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2016-06-03 00:23
Your news entry says "don't defining".  The doc note can say that the classes are only defined if the platform supports fork.
msg267006 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2016-06-03 00:24
Well, defined for 3.6, and "functional" for 2.7 and 3.5 docs.
msg267029 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2016-06-03 03:03
This broke test_socketserver:

http://buildbot.python.org/all/builders/AMD64%20Windows7%20SP1%203.x/builds/7709/steps/test/logs/stdio
0:08:57 [193/400/1] test_socketserver failed
test test_socketserver crashed -- Traceback (most recent call last):
  File "C:\buildbot.python.org\3.x.kloth-win64\build\lib\test\test_socketserver.py", line 371, in <module>
    class ForkingErrorTestServer(socketserver.ForkingMixIn, BaseErrorTestServer):
AttributeError: module 'socketserver' has no attribute 'ForkingMixIn'

I am with David that it may not be worthwhile churning the API like this. Just document the existing (in 3.5) status that even though the classes exist, they need a working os.fork(). Otherwise, everyone that references ForkingMixIn but doesn’t use it (like test_socketserver) will have to update their code for 3.6.
msg267042 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-06-03 05:26
New changeset 3145242bc81f by Gregory P. Smith in branch 'default':
Issue25931: fix tests broken by the conditional define of socketserver.Forking*
https://hg.python.org/cpython/rev/3145242bc81f
msg267045 - (view) Author: Gregory P. Smith (gregory.p.smith) * (Python committer) Date: 2016-06-03 05:37
It may be worth rolling back the above two commits.  I'm not sure.  I'd like to see if anything else falls out of this during the beta phases.

There is a chance that some library has code similar to that found in test_socketserver.py that defines classes that inherit from the Forking type(s) but which are conditionally never used on Windows.  The above commit would break that.  I'm not sure how common that'll be.
msg267048 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-06-03 05:45
New changeset 015b86646d8e by Gregory P. Smith in branch 'default':
issue25931: document that socketserver.Forking* are unavailable on platforms
https://hg.python.org/cpython/rev/015b86646d8e
msg267049 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-06-03 05:48
New changeset a4c0208b10df by Gregory P. Smith in branch '2.7':
issue25931: document that socketserver.Forking* are unavailable on platforms
https://hg.python.org/cpython/rev/a4c0208b10df
History
Date User Action Args
2016-06-03 20:27:32berker.peksagsetstage: commit review -> resolved
2016-06-03 05:56:57gregory.p.smithsetstatus: open -> closed
resolution: fixed
stage: needs patch -> commit review
2016-06-03 05:48:37python-devsetmessages: + msg267049
2016-06-03 05:45:08python-devsetmessages: + msg267048
2016-06-03 05:37:55gregory.p.smithsetmessages: + msg267045
2016-06-03 05:26:25python-devsetmessages: + msg267042
2016-06-03 03:03:10martin.pantersetnosy: + martin.panter

messages: + msg267029
versions: + Python 3.6
2016-06-03 00:24:50r.david.murraysetmessages: + msg267006
2016-06-03 00:23:52r.david.murraysetmessages: + msg267005
2016-06-03 00:19:11gregory.p.smithsetnosy: + gregory.p.smith

messages: + msg267001
versions: - Python 3.6
2016-06-03 00:16:15python-devsetnosy: + python-dev
messages: + msg266999
2016-06-01 23:44:20r.david.murraysetnosy: + r.david.murray, docs@python
messages: + msg266845

assignee: docs@python
components: + Documentation, - Library (Lib), Windows
stage: needs patch
2016-04-12 15:44:31SilentGhostsetversions: - Python 3.4
2016-04-12 15:26:02supriyantomaftuhsetnosy: + supriyanto maftuh

versions: + Python 3.4
2016-04-12 14:22:50antvalenciasetnosy: + antvalencia
2016-02-12 15:16:07davinsetnosy: + davin
2015-12-23 03:40:36eryksunsetversions: + Python 3.5, Python 3.6
nosy: + eryksun

messages: + msg256898

components: + Library (Lib)
2015-12-23 03:10:31Sam Lobelcreate