繁体   English   中英

通过websocket从并行线程发送数据

[英]Sending data by websockets from parallel thread

今天,我一直在尝试在Javascript和Django之间创建异步任务。

为了创建并管理websocket,我使用了第三方API推送程序(请确保该问题并非专门针对该推送程序)。 该系统最初在主线程中使用时运行良好:

import pusher
import time
from django.shortcuts import render

...
def myView(request):
    ...
    def sendData():
        time.sleep(10)
        pusher_client = pusher.Pusher(
          args='values',
        )
        pusher_client.trigger('my-channel', 'my-event', {'message': 'Test'})
    ...
    return render('My.html', {'keys': 'values'})

这是Javascript中的侦听器:

var channel = pusher.subscribe('my-channel');
channel.bind('my-event', function(data) {
  alert(data.message);
});

然后我想创建一个并行线程,因此用户不必等待10秒钟即可接收并行线程。 取而代之的是,将显示模板,并在请求后的10秒钟内提醒用户。

所以我添加了以下代码,它将两个过程分开:

import pusher
import time
from django.shortcuts import render
from threading import Thread

...
def myView(request):
    ...
    def sendData():
        time.sleep(10)
        pusher_client = pusher.Pusher(
          keys='values',
        )
        pusher_client.trigger('my-channel', 'my-event', {'message': 'Test'})

    th = Thread(target=sendData)
    th.daemon = True
    th.start()
    ...
    return render('My.html', {'keys': 'values'})

在为该函数创建另一个线程之后,该函数本身将被执行,但是无法从Javascript传输数据...

这些是我执行操作时的事件日志:

如您所见,即使过去10秒钟,最后一个事件也总是被占用

如您所见,即使经过10秒钟,最后一个事件也始终处于占用状态。

可能是什么问题呢? 问题是由在不同线程上使用websocket引起的吗? 还有其他解决方案吗?

似乎Thread无法正常工作,因为每当我从另一个计算机节点发送消息时,消息都会在几秒钟内传递出去。

提前致谢。

这是由托管服务禁止使用多线程引起的。 新线程从未启动,因此该事件从未发送到Pusher。

(我在扩展评论聊天中引用了@ShellRox。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM