Skip to content

Async/await, read file error: greenlet.error: cannot switch to a different thread #4355

@woods-dev

Description

@woods-dev

When i try to read file on windows 10, it is work,
but i try to read file on linux, it is error:

Traceback (most recent call last):
File "***.py", line 75, in decorated
return await func(args, kwargs)
File "
.py", line 42, in design
file = request.files.get('file').read().decode(encoding='UTF-8')
File "/data/Python/python396/lib/python3.9/site-packages/werkzeug/utils.py", line 97, in get
value = self.fget(obj) # type: ignore
File "/data/Python/python396/lib/python3.9/site-packages/werkzeug/wrappers/request.py", line 499, in files
self._load_form_data()
File "/data/Python/python396/lib/python3.9/site-packages/flask/wrappers.py", line 113, in _load_form_data
RequestBase._load_form_data(self)
File "/data/Python/python396/lib/python3.9/site-packages/werkzeug/wrappers/request.py", line 285, in _load_form_data
data = parser.parse(
File "/data/Python/python396/lib/python3.9/site-packages/werkzeug/formparser.py", line 265, in parse
return parse_func(self, stream, mimetype, content_length, options)
File "/data/Python/python396/lib/python3.9/site-packages/werkzeug/formparser.py", line 150, in wrapper
chunk = stream.read(1024 * 64)
File "/data/Python/python396/lib/python3.9/site-packages/gevent/pywsgi.py", line 320, in read
return self._do_read(length)
File "/data/Python/python396/lib/python3.9/site-packages/gevent/pywsgi.py", line 182, in _do_read
read = reader(length)
File "/data/Python/python396/lib/python3.9/socket.py", line 704, in readinto
return self._sock.recv_into(b)
File "/data/Python/python396/lib/python3.9/site-packages/gevent/_socketcommon.py", line 693, in recv_into
self._wait(self._read_event)
File "src/gevent/_hub_primitives.py", line 317, in gevent._gevent_c_hub_primitives.wait_on_socket
File "src/gevent/_hub_primitives.py", line 322, in gevent._gevent_c_hub_primitives.wait_on_socket
File "src/gevent/_hub_primitives.py", line 304, in gevent._gevent_c_hub_primitives._primitive_wait
File "src/gevent/_hub_primitives.py", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait
File "src/gevent/_hub_primitives.py", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait
File "src/gevent/_hub_primitives.py", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait
File "src/gevent/_waiter.py", line 154, in gevent._gevent_c_waiter.Waiter.get
File "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch
File "src/gevent/_greenlet_primitives.py", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch
File "src/gevent/_greenlet_primitives.py", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch
File "src/gevent/_gevent_c_greenlet_primitives.pxd", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switch
greenlet.error: cannot switch to a different thread

Environment:
Linux vm10-62-3-2 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Python version:
python3.9.6
Flask version:
flask2.0
Server:
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
http_server = WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions