Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python redis连接中的socket.getaddrinfo引发OSError:[Errno 16]设备或资源正忙_Python_Ubuntu_Flask_Redis_Raspberry Pi4 - Fatal编程技术网

Python redis连接中的socket.getaddrinfo引发OSError:[Errno 16]设备或资源正忙

Python redis连接中的socket.getaddrinfo引发OSError:[Errno 16]设备或资源正忙,python,ubuntu,flask,redis,raspberry-pi4,Python,Ubuntu,Flask,Redis,Raspberry Pi4,说明: 我有一个小型图像服务器,您可以在其中设置来自两个不同设备的图像名称1和图像名称2,服务器显示由这两个名称组成的图像路径。例如,设备1将图像1设置为foo,设备2将图像2设置为bar,然后服务器将显示图像foo_bar.png,并使用redis pub sub机制和SSE重新加载浏览器。下面是映像服务器的代码: from flask import Flask, render_template, Response import os import redis app = Flask(__n

说明: 我有一个小型图像服务器,您可以在其中设置来自两个不同设备的图像名称1和图像名称2,服务器显示由这两个名称组成的图像路径。例如,设备1将图像1设置为foo,设备2将图像2设置为bar,然后服务器将显示图像foo_bar.png,并使用redis pub sub机制和SSE重新加载浏览器。下面是映像服务器的代码:

from flask import Flask, render_template, Response
import os
import redis

app = Flask(__name__)
pool = redis.ConnectionPool(host="localhost", port=6379)
red = redis.StrictRedis(connection_pool=pool)


@app.route("/")
@app.route("/get_image")
def get_image():
    image_1_name = app.config['image_1_name']
    image_2_name = app.config['image_2_name']
    image_exists = False
    image_name = "{} {}.png".format(image_1_name, image_2_name)
    if image_1_name != "'-'" and image_2_name != "'-'":
        image_path = os.path.join("static", image_name)
        if os.path.isfile(image_path):
            image_exists = True
    return render_template("image_server.html", image_path=image_name, image_exists=image_exists)


@app.route("/set_image/<sign1>/<sign2>")
def set_image(sign1, sign2):
    image_name = "{} {}.png".format(sign1, sign2)
    app.config['image_name'] = image_name
    red.publish("chat", "Reload")
    return {"success": True}


@app.route("/set_image_n/<n>/<sign>")
def set_image_n(n, sign):
    app.config[f'image_{n}_name'] = sign
    red.publish("chat", "Reload")
    return {"success": True}


def event_stream():
    pubsub = red.pubsub()
    pubsub.subscribe('chat')
    for message in pubsub.listen():
        yield 'data: %s\n\n' % message['data']


@app.route('/stream')
def stream():
    return Response(event_stream(), mimetype="text/event-stream")


if __name__ == '__main__':
    app.config['image_name'] = "'-'"
    app.config['image_1_name'] = "'-'"
    app.config['image_2_name'] = "'-'"
    app.run(host="0.0.0.0", debug=False, use_reloader=False, threaded=True)

现在,当让这个循环运行数千次调用时,一切都按预期进行,但过一段时间后,在问题发生之前,它可能是几百次调用或几千次调用,我得到以下stacktrace:


127.0.0.1 - - [10/May/2021 17:09:44] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:44] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
127.0.0.1 - - [10/May/2021 17:09:44] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:45] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
192.168.254.18 - - [10/May/2021 17:09:45] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.13 - - [10/May/2021 17:09:45] "[37mGET /set_image_n/1/60 HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:45] "[37mGET / HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:45] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:46] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
127.0.0.1 - - [10/May/2021 17:09:46] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:46] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
192.168.254.18 - - [10/May/2021 17:09:46] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.27 - - [10/May/2021 17:09:47] "[37mGET /set_image_n/2/60 HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:47] "[37mGET / HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:47] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:48] "[36mGET /static/60%2060.png HTTP/1.1[0m" 304 -
127.0.0.1 - - [10/May/2021 17:09:48] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:48] "[36mGET /static/60%2060.png HTTP/1.1[0m" 304 -
192.168.254.18 - - [10/May/2021 17:09:48] "[37mGET /stream HTTP/1.1[0m" 200 -
[2021-05-10 17:09:48,817] ERROR in app: Exception on /set_image_n/1/60 [GET]
Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 559, in connect
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 584, in _connect
  File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
OSError: [Errno 16] Device or resource busy

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 2447, in wsgi_app
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1952, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1821, in handle_user_exception
  File "/home/usr/project/lib/python3.9/site-packages/flask/_compat.py", line 39, in reraise
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1950, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1936, in dispatch_request
  File "/home/usr/project/src/project/image_server.py", line 35, in set_image_n
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 3098, in publish
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 898, in execute_command
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 1192, in get_connection
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 563, in connect
redis.exceptions.ConnectionError: Error 16 connecting to localhost:6379. Device or resource busy.
192.168.254.13 - - [10/May/2021 17:09:48] "[35m[1mGET /set_image_n/1/60 HTTP/1.1[0m" 500 -
[2021-05-10 17:09:49,815] ERROR in app: Exception on /set_image_n/2/80 [GET]
Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 559, in connect
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 584, in _connect
  File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
OSError: [Errno 16] Device or resource busy

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 2447, in wsgi_app
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1952, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1821, in handle_user_exception
  File "/home/usr/project/lib/python3.9/site-packages/flask/_compat.py", line 39, in reraise
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1950, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1936, in dispatch_request
  File "/home/usr/project/src/project/image_server.py", line 35, in set_image_n
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 3098, in publish
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 898, in execute_command
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 1192, in get_connection
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 563, in connect
redis.exceptions.ConnectionError: Error 16 connecting to localhost:6379. Device or resource busy.
我的问题是什么资源或设备正忙?redis服务器还是端口?为什么它可以运行数千个电话,但一旦忙了,它就永远忙下去?我的主要问题是,它不会自行恢复,在某些电话中占线是可以的,但在它占线后,它会一直占线

版本: redis:6.0.11 redis py:3.5.3

平台:什么平台/版本?(例如Windows7/Ubuntu 15.10/Azure上的Python 3.5.1) 运行Python 3.9.4的raspberry pi 4B上的Ubuntu 21.04 ulimit:无限 cat/proc/sys/fs/inotify/max_user_手表65536

import time
import requests

counter = 0
url = "192.168.254.181"
while True:
    if counter % 10 == 0:
        print(counter)
    requests.get(f"http://{url}:5000/set_image_n/1/60")
    counter += 1
    time.sleep(1)



127.0.0.1 - - [10/May/2021 17:09:44] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:44] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
127.0.0.1 - - [10/May/2021 17:09:44] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:45] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
192.168.254.18 - - [10/May/2021 17:09:45] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.13 - - [10/May/2021 17:09:45] "[37mGET /set_image_n/1/60 HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:45] "[37mGET / HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:45] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:46] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
127.0.0.1 - - [10/May/2021 17:09:46] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:46] "[36mGET /static/60%2080.png HTTP/1.1[0m" 304 -
192.168.254.18 - - [10/May/2021 17:09:46] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.27 - - [10/May/2021 17:09:47] "[37mGET /set_image_n/2/60 HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:47] "[37mGET / HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:47] "[37mGET / HTTP/1.1[0m" 200 -
127.0.0.1 - - [10/May/2021 17:09:48] "[36mGET /static/60%2060.png HTTP/1.1[0m" 304 -
127.0.0.1 - - [10/May/2021 17:09:48] "[37mGET /stream HTTP/1.1[0m" 200 -
192.168.254.18 - - [10/May/2021 17:09:48] "[36mGET /static/60%2060.png HTTP/1.1[0m" 304 -
192.168.254.18 - - [10/May/2021 17:09:48] "[37mGET /stream HTTP/1.1[0m" 200 -
[2021-05-10 17:09:48,817] ERROR in app: Exception on /set_image_n/1/60 [GET]
Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 559, in connect
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 584, in _connect
  File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
OSError: [Errno 16] Device or resource busy

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 2447, in wsgi_app
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1952, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1821, in handle_user_exception
  File "/home/usr/project/lib/python3.9/site-packages/flask/_compat.py", line 39, in reraise
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1950, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1936, in dispatch_request
  File "/home/usr/project/src/project/image_server.py", line 35, in set_image_n
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 3098, in publish
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 898, in execute_command
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 1192, in get_connection
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 563, in connect
redis.exceptions.ConnectionError: Error 16 connecting to localhost:6379. Device or resource busy.
192.168.254.13 - - [10/May/2021 17:09:48] "[35m[1mGET /set_image_n/1/60 HTTP/1.1[0m" 500 -
[2021-05-10 17:09:49,815] ERROR in app: Exception on /set_image_n/2/80 [GET]
Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 559, in connect
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 584, in _connect
  File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
OSError: [Errno 16] Device or resource busy

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 2447, in wsgi_app
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1952, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1821, in handle_user_exception
  File "/home/usr/project/lib/python3.9/site-packages/flask/_compat.py", line 39, in reraise
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1950, in full_dispatch_request
  File "/home/usr/project/lib/python3.9/site-packages/flask/app.py", line 1936, in dispatch_request
  File "/home/usr/project/src/project/image_server.py", line 35, in set_image_n
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 3098, in publish
  File "/home/usr/project/lib/python3.9/site-packages/redis/client.py", line 898, in execute_command
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 1192, in get_connection
  File "/home/usr/project/lib/python3.9/site-packages/redis/connection.py", line 563, in connect
redis.exceptions.ConnectionError: Error 16 connecting to localhost:6379. Device or resource busy.