WinError6 句柄无效 Python 3+ 多处理

2024-05-12

我正在运行一个 Python 3.7 Flask 应用程序,它使用flask_socketio设置一个socketio用于浏览器客户端的服务器,另一个连接到单独远程的Python进程socketio服务器和交换消息,以及另一个从 PIR 传感器读取输入的 python 进程。

两个 python 进程通过以下方式进行通信multiprocessing.Queue- 但是,socketio进程总是得到[WinError6] - Invalid Handle or [WinError5] - Permission Denied。我完全不知道我做错了什么。

这是顶级(服务器)代码;似乎没有问题:

from shotsocket import init as shotsocket_init
from shotsocket import util as matchmaking_util
import multiprocessing, os, config, uuid

match_queue = multiprocessing.Queue()
shot_queue = multiprocessing.Queue()

app = Flask(__name__, static_url_path='', static_folder='templates')
socketio = SocketIO(app)

_rooms = [] # I don't plan to keep this in memory, just doing it for debug / dev 

...

上面的效果很好,很花花公子。以下块中的倒数第二行就是问题所在。

# THIS IS THE FUNC WHERE WE ARE TRYING TO USE 
# THE BROKEN QUEUE

@socketio.on('connect')
def listen():
    room_key = str(uuid.uuid4())
    join_room(room_key)
    _rooms.append((room_key, request.sid))
    possible_match = matchmaking_util.match_pending_clients(_rooms)
    if possible_match:
        shot_queue.put_nowait(possible_match)
        print('put it in there')

以下是我启动这些过程的方式:


if __name__ == '__main__':
    debug = os.environ.get('MOONSHOT_DEBUG', False)
    try:
        proc = multiprocessing.Process(target=start, args=(debug,match_queue))
        proc.start()
        shot_proc = multiprocessing.Process(target=shotsocket_init, args=(shot_queue,))
        shot_proc.start()
        socketio.run(app, host='0.0.0.0')
    except KeyboardInterrupt:
        socketio.stop()
        proc.join()
        shot_proc.join()

这是全部shotsocket(代码无法读取队列)

import socketio, multiprocessing # mp for the type

sio = socketio.Client(engineio_logger=True)
sio.connect('redacted woot', transports=['websocket'])


@sio.on('connect')
def connect():
    print("connected to shot server")

def init(queue: multiprocessing.Queue):
    while True:
        try:
            # WE NEVER GET PAST THIS LINE
            print(queue.get())
        except Exception as e:
            continue
        if not queue.empty():
            print('queue empty')
            shot = queue.get()
            print(shot)         
            match_id, opponents = shot
            sio.emit('start', {'id': match_id, 'opponents': [opponents[0], opponents[1]]})

我正在拔头发。我到底做错了什么?


Solution

我不知道为什么这可以解决问题,但是从multiprocessing.Queue to queue.Queue and multiprocessing.Process to threading.Thread did it.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WinError6 句柄无效 Python 3+ 多处理 的相关文章

随机推荐

  • EDI AS2 HTTP 跟踪?

    我们正在研究 AS2 实现 并希望能够构建有意义的测试用例以与 SoapUI 或 Postman 一起使用 为了做到这一点 我们有两种方法 只是尝试从现有客户端进行 tcp 转储 跟踪调用 从普通 EDI 文档开始手动构建一些简单的调用 或
  • Install-Package:无法解析远程名称:“packages.nuget.org”[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 无缘无故地
  • 可视化对象检测图时 TensorBoard 挂起

    我需要可视化 TensorFlow 对象检测模型的结构 我正在尝试在 Colab 中使用 TensorBoard 并使用下面的代码 当 TensorBoard 加载日志时 它会卡在 命名空间层次结构 查找相似子图 步骤上 pip insta
  • 如何将视图动态添加到已在 xml 布局中声明的relativelayout?

    我宣布了一个RelativeLayout在 xml 布局文件中 现在我想添加Views从代码到现有布局 我添加了一个Button通过代码动态地更改为现有布局 如下所示 rLayout RelativeLayout findViewById
  • 通过 HTTPS 加载页面但请求不安全的 XMLHttpRequest 端点

    我有一个页面 上面有一些 D3 javascript 该页面位于 HTTPS 网站内 但证书是自签名的 当我加载页面时 我的 D3 可视化效果不显示 并且出现错误 混合内容 页面位于 https integration jsite com
  • 为什么 lodash 将我的数组转换为对象?

    我是 lodash 的新手 创建了一个函数 该函数从值为 null 或空白的对象中删除键 但是当我传递包含某些部分作为数组的对象时 它会删除数组并将其转换为对象 下面是我尝试过的代码 mixin removeFalsies this rem
  • 如何使用 django 过滤器 icontains 获取多个字段

    我正在尝试将查询搜索与所有模型字段进行比较 但我不知道如何在多个字段中执行此操作 这是我的代码 expense Expense objects filter user request user id order by date q requ
  • 如何在java中压缩/解压tar.gz文件

    谁能告诉我在java中压缩和解压缩tar gzip文件的正确方法我一直在搜索 但我能找到的最多的是zip或gzip 单独 我写了一个包装器公共压缩 http commons apache org compress called jarchi
  • Firebase如何获取用户详细信息?

    我在我的应用程序中使用 Firebase 身份验证 并使用电子邮件和密码注册用户 当用户使用自己的帐户登录时 我也想获取其他用户的详细信息 与登录用户分开 我怎样才能得到这些信息 电子邮件 显示名称和 ID 特定于身份验证系统 等值可从Fi
  • 当 OpenGL 中同时绑定 1D 和 2D 纹理时,正确的行为是什么?

    假设你有这样的东西 glBindTexture GL TEXTURE 2D my2dTex glBindTexture GL TEXTURE 1D my1dTex glBegin 正确的 OpenGL 行为是什么 要绘制一维纹理 二维纹理还
  • pip install ecos 错误,显示“需要 Microsoft Visual C++ 14.0”。 [复制]

    这个问题在这里已经有答案了 我正在尝试使用 pip install 在我的 anaconda 中安装 fancyimpute 但错误显示由于 需要 Microsoft Visual C 14 0 而无法安装 ecos 提供的链接已过期 有谁
  • Term::ReadLine - 我需要点击向上箭头两次才能检索历史记录

    我正在使用 Term ReadLine 并遇到一个奇怪的问题 我需要点击向上箭头两次才能从 addhistory 中检索项目 这是我正在使用的脚本 use Term ReadLine my term Term ReadLine gt new
  • RxJS - 我需要取消订阅吗

    如果我有这样的事情 class MyComponent constructor this interval Observbale interval 1000 const c new MyComponent const subscriptio
  • 无法将大小为 1665179 的数组重塑为形状 (512,512,3,3)

    该脚本用于进行检测 权重文件是 yolov4 coco 预训练模型 可以在这里找到 https drive google com file d 1cewMfusmPjYWbrnuJRuKhPMwRe b9PaT view https dri
  • UIButton 上的圆形渐变边框

    您好 我一直在尝试在我的应用程序中实现一个 UIButton 它具有圆角和渐变边框 我使用以下代码在按钮上创建渐变边框 let gradient CAGradientLayer gradient frame CGRect origin CG
  • Android如何让进度条(圆形)在按下按钮时覆盖全屏?

    我尝试在单击提交按钮时显示进度栏 数据加载完成后它将隐藏 但是 进度条没有覆盖全屏 相反 它被按钮覆盖 请参考截图 应该更容易理解我的意思 我想要实现的是屏幕截图的底部部分 Main4Activity java public class M
  • 获取jdbc中表依赖顺序

    我在 MySQL 数据库中有一组表 A B C D 依赖关系如下 B gt C gt A 和 D gt A 也就是说 A 有一个 PrimaryKey C 有一个外键指向 A 的主键 B 有一个外键指向 C 的主键 类似地 D 有一个外键指
  • 如何更改 Amazon Redshift 中的默认时区?

    默认情况下将时间戳列设置为 SYSDATE 将其存储为UTC 是否可以更改时区 以便 SYSDATE 将日期和时间存储到不同的时区 到目前为止 我已经检查了SET http docs aws amazon com redshift late
  • 机架超时:关闭信息/活动日志记录

    随着机架超时 https github com heroku rack timeoutgem 安装后如何才能仅显示 ERROR 相关日志 例如 我想避免在我的日志中出现以下内容 source rack timeout id 8a11a8ac
  • WinError6 句柄无效 Python 3+ 多处理

    我正在运行一个 Python 3 7 Flask 应用程序 它使用flask socketio设置一个socketio用于浏览器客户端的服务器 另一个连接到单独远程的Python进程socketio服务器和交换消息 以及另一个从 PIR 传