让 PubNub 订阅者作为服务保持活动状态(Python SDK)
Keep a PubNub subscriber alive as a service (Python SDK)
我觉得太愚蠢了。
我正在从 GPS/Bluetooth 个节点向 PubNub 发布消息。这工作正常。
我需要订阅 PubNub 频道并将消息导入数据库 24/7(基于 Django 的 PostgreSQL)。我使用数据库来绘制节点位置、添加密钥、注册用户等...
问题:此Python 脚本在execute()
后终止。我需要它才能永远活着。
# Set up the client params
pnconfig = PNConfiguration()
pnconfig.subscribe_key = 'sub-23948570947502475057205702354702547'
pnconfig.ssl = True
# Connect to PubNub and subscribe to a channel
pubnub = PubNub(config=pnconfig)
pubnub.add_listener(NodeSubscribeCallback())
pubnub.subscribe().channels('node_raw').execute()
问题:我如何运行订阅 PubNub 频道作为服务?换句话说,我怎样才能让我的脚本 Python 保持 运行ning?
我试过了:
- 几个单独的类到运行
PubNub
基于threading.Thread
while True: time.sleep(10)
在 execute()
之后
- 谷歌搜索时间
signal.pause()
在我的脚本末尾
作为服务(Python SDK)使 PubNub 订阅者保持活动状态
您可以使用数据库同步方法。您的代码即将完成。只需要一些点点滴滴。这是您实现目标所需的代码。
import pubnub
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub, SubscribeListener
class DatabaseSync(SubscribeListener):
def message( self, pubnub, data ):
print( "Saving to Database: ", data.message )
pnconfig = PNConfiguration()
pnconfig.subscribe_key = 'demo' ## Only Need SubKey
pnconfig.ssl = True ## Use TLS Socket
pubnub = PubNub(pnconfig)
pubnub.add_listener(DatabaseSync())
pubnub.subscribe().channels("node_raw").execute()
就是这样!使用 Python 获取同步到数据库的事件更改日志的超级简单易行的方法。素材来自PubNub Python Documentation and also an old gist learning Python by Example.
这是一个耗时的问题,我不确定确切的原因。我在最初 question/problem 中遵循了@Stephen Blum 的回答,但也许我遗漏了一些东西。
我在最初的问题中犯了一个遗漏错误:请注意,我是在 threading.Thread
中创建此订阅。我认为这是相关的。
以下是我解决问题的方法:
这里的关键是 run()
方法末尾的 signal.pause()
。
我认为它可以防止线程死亡 - 但我希望我的 NodeSubscribeCallback
(如斯蒂芬的回答所示)。
我觉得太愚蠢了。
我正在从 GPS/Bluetooth 个节点向 PubNub 发布消息。这工作正常。
我需要订阅 PubNub 频道并将消息导入数据库 24/7(基于 Django 的 PostgreSQL)。我使用数据库来绘制节点位置、添加密钥、注册用户等...
问题:此Python 脚本在execute()
后终止。我需要它才能永远活着。
# Set up the client params
pnconfig = PNConfiguration()
pnconfig.subscribe_key = 'sub-23948570947502475057205702354702547'
pnconfig.ssl = True
# Connect to PubNub and subscribe to a channel
pubnub = PubNub(config=pnconfig)
pubnub.add_listener(NodeSubscribeCallback())
pubnub.subscribe().channels('node_raw').execute()
问题:我如何运行订阅 PubNub 频道作为服务?换句话说,我怎样才能让我的脚本 Python 保持 运行ning?
我试过了:
- 几个单独的类到运行
PubNub
基于threading.Thread
while True: time.sleep(10)
在execute()
之后
- 谷歌搜索时间
signal.pause()
在我的脚本末尾
作为服务(Python SDK)使 PubNub 订阅者保持活动状态
您可以使用数据库同步方法。您的代码即将完成。只需要一些点点滴滴。这是您实现目标所需的代码。
import pubnub
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub, SubscribeListener
class DatabaseSync(SubscribeListener):
def message( self, pubnub, data ):
print( "Saving to Database: ", data.message )
pnconfig = PNConfiguration()
pnconfig.subscribe_key = 'demo' ## Only Need SubKey
pnconfig.ssl = True ## Use TLS Socket
pubnub = PubNub(pnconfig)
pubnub.add_listener(DatabaseSync())
pubnub.subscribe().channels("node_raw").execute()
就是这样!使用 Python 获取同步到数据库的事件更改日志的超级简单易行的方法。素材来自PubNub Python Documentation and also an old gist learning Python by Example.
这是一个耗时的问题,我不确定确切的原因。我在最初 question/problem 中遵循了@Stephen Blum 的回答,但也许我遗漏了一些东西。
我在最初的问题中犯了一个遗漏错误:请注意,我是在 threading.Thread
中创建此订阅。我认为这是相关的。
以下是我解决问题的方法:
这里的关键是 run()
方法末尾的 signal.pause()
。
我认为它可以防止线程死亡 - 但我希望我的 NodeSubscribeCallback
(如斯蒂芬的回答所示)。