从并行线程通过 websockets 发送数据
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 秒后,最后一个事件也总是被占用。
可能是什么问题?问题是在不同线程上使用 websockets 引起的吗?还有其他解决方案吗?
Thread 似乎无法正常工作,因为每当我从另一个计算机节点发送消息时,消息都会在几秒钟内送达。
提前致谢。
这是由于托管服务禁止多线程造成的。新线程从未启动,因此事件从未发送到 Pusher。
(我在扩展评论聊天中引用@ShellRox。)
今天我一直在尝试在 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 秒后,最后一个事件也总是被占用。
可能是什么问题?问题是在不同线程上使用 websockets 引起的吗?还有其他解决方案吗?
Thread 似乎无法正常工作,因为每当我从另一个计算机节点发送消息时,消息都会在几秒钟内送达。
提前致谢。
这是由于托管服务禁止多线程造成的。新线程从未启动,因此事件从未发送到 Pusher。
(我在扩展评论聊天中引用@ShellRox。)