使用flask和python请求时出现uwsgi分段错误

问题描述 投票:0回答:1

我正在使用flask运行一个开发uwsgi服务器,并且对requests.get的调用正在uWSGI进程中触发分段错误。

分段错误:

!!! uWSGI process 70490 got Segmentation Fault !!!
*** backtrace of 70490 ***
0   uwsgi                               0x000000010b394c70 uwsgi_backtrace + 48
1   uwsgi                               0x000000010b3951b3 uwsgi_segfault + 51
2   libsystem_platform.dylib            0x00007fff82784eaa _sigtramp + 26
3   ???                                 0x0000000000000000 0x0 + 0
4   libxpc.dylib                        0x00007fff914d2aa0 xpc_connection_resume + 192
5   CoreFoundation                      0x00007fff91fbb9d1 _CFPrefsWithDaemonConnection + 353
6   CoreFoundation                      0x00007fff91f8aae6 __66-[CFPrefsSearchListSource generationCountFromListOfSources:count:]_block_invoke + 150
7   CoreFoundation                      0x00007fff91f8a883 -[CFPrefsSearchListSource generationCountFromListOfSources:count:] + 179
8   CoreFoundation                      0x00007fff91e39cb4 -[CFPrefsSearchListSource alreadylocked_copyDictionary] + 324
9   CoreFoundation                      0x00007fff91e3498c -[CFPrefsSearchListSource alreadylocked_copyValueForKey:] + 60
10  CoreFoundation                      0x00007fff91fbc64c ___CFPreferencesCopyAppValueWithContainer_block_invoke + 60
11  CoreFoundation                      0x00007fff91f89750 +[CFPrefsSearchListSource withSearchListForIdentifier:container:perform:] + 608
12  CoreFoundation                      0x00007fff91fbc5c7 _CFPreferencesCopyAppValueWithContainer + 183
13  SystemConfiguration                 0x00007fff92301aab SCDynamicStoreCopyProxiesWithOptions + 163
14  _scproxy.so                         0x000000010bdac914 init_scproxy + 58
15  Python                              0x000000010b55aa90 PyEval_EvalFrameEx + 13533
16  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
17  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
18  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
19  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
20  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
21  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
22  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
23  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
24  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
25  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
26  Python                              0x000000010b5573c1 PyEval_EvalCodeEx + 1583
27  Python                              0x000000010b4fc2e5 PyFunction_SetClosure + 828
28  Python                              0x000000010b4de202 PyObject_Call + 99
29  Python                              0x000000010b55a4ac PyEval_EvalFrameEx + 12025
30  Python                              0x000000010b5573c1 PyEval_EvalCodeEx + 1583
31  Python                              0x000000010b4fc2e5 PyFunction_SetClosure + 828
32  Python                              0x000000010b4de202 PyObject_Call + 99
33  Python                              0x000000010b55a4ac PyEval_EvalFrameEx + 12025
34  Python                              0x000000010b5573c1 PyEval_EvalCodeEx + 1583
35  Python                              0x000000010b55d4ae _PyEval_SliceIndex + 342
36  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
37  Python                              0x000000010b5573c1 PyEval_EvalCodeEx + 1583
38  Python                              0x000000010b55d4ae _PyEval_SliceIndex + 342
39  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
40  Python                              0x000000010b5573c1 PyEval_EvalCodeEx + 1583
41  Python                              0x000000010b4fc2e5 PyFunction_SetClosure + 828
42  Python                              0x000000010b4de202 PyObject_Call + 99
43  Python                              0x000000010b55a4ac PyEval_EvalFrameEx + 12025
44  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
45  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
46  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
47  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
48  Python                              0x000000010b55d541 _PyEval_SliceIndex + 489
49  Python                              0x000000010b55a30c PyEval_EvalFrameEx + 11609
50  Python                              0x000000010b5573c1 PyEval_EvalCodeEx + 1583
51  Python                              0x000000010b4fc2e5 PyFunction_SetClosure + 828
52  Python                              0x000000010b4de202 PyObject_Call + 99
53  Python                              0x000000010b4e8ff5 PyMethod_New + 1221
54  Python                              0x000000010b4de202 PyObject_Call + 99
55  Python                              0x000000010b524a33 _PyObject_SlotCompare + 2939
56  Python                              0x000000010b4de202 PyObject_Call + 99
57  Python                              0x000000010b55ce83 PyEval_CallObjectWithKeywords + 165
58  uwsgi                               0x000000010b3b0287 python_call + 23
59  uwsgi                               0x000000010b3b24b0 uwsgi_request_wsgi + 880
60  uwsgi                               0x000000010b346770 wsgi_req_recv + 288
61  uwsgi                               0x000000010b39292a simple_loop_run + 218
62  uwsgi                               0x000000010b399f7b uwsgi_ignition + 443
63  uwsgi                               0x000000010b399d73 uwsgi_worker_run + 883

uWSGI命令:

uwsgi --http 0.0.0.0:8083 --ini uwsgi.ini

uWSGI

[uwsgi]
# this config will be loaded if nothing specific is specified
# load base config from below
ini = :base

# %d is the dir this configuration file is in
socket = %d/conf/app.sock
master = true
processes = 4

[dev]
ini = :base
# socket (uwsgi) is not the same as http, nor http-socket
socket = :8001


[local]
ini = :base
http = :8000
# set the virtual env to use
home=$dappenv


[base]
# chdir to the folder of this config file, plus app/website
chdir = %d
# load the module from wsgi.py, it is a python path from 
# the directory above.
module = app.application:app
# allow anyone int the group to connect to the socket.
chmod-socket=666

有问题的代码片段:

def find_places_with_name(self, name):
    url = "{}/textsearch/json?query={}&key={}".format(
        self.api_url_root,
        name,
        self.api_key
    )

    #search_response = requests.get(url)
    # THE NEXT LINE IS THE LINE THAT BREAKS
    search_response = requests.get('http://www.google.com')
    if search_response.status_code != 200:
        # TODO throw/log
        pass

    return search_response.json()

版本:

  • Mac OS X 10.11.3
  • uWSGI 2.0.12(64位)
  • Python 2.7.11 (v2.7.11:6d1b6a68f775,2015 年 12 月 5 日,12:54:16)
  • 请求2.9.1

直接从命令行运行 python 代码片段没有任何问题。

我重新安装了uwsgi,但这似乎不起作用。我不太熟悉 uWSGI 配置参数的复杂性。是否有可能是我的配置文件中的某些内容导致了这种情况?

python flask python-requests uwsgi
1个回答
0
投票

从后来使用 python3 的用户看来,在 MacOS 中分叉非分叉安全库可能是问题所在。请参阅此内容,包括解决方法:https://bugs.python.org/issue30385

© www.soinside.com 2019 - 2024. All rights reserved.