[解決済み] ValueError: シグナルはメインスレッドでのみ動作します。
2022-02-02 05:11:37
質問
このコードを実行すると、次のようなエラーが発生します。
ValueError: シグナルはメインスレッドでのみ機能します。
ActiveMQを使用しています。
RealTorは私のSpider(selogerSpider)がある名前です。これはスクレイピングに役立ちます。
import stomp
from RealTor import selogerSpider
from scrapy.crawler import CrawlerProcess
from scrapy.settings import Settings
class MyListener(stomp.ConnectionListener):
def on_error(self, headers, message):
print('received an error "%s"' % message)
def on_message(self, headers, message):
print('received a message "%s"' % message)
settings = Settings()
settings.set("USER_AGENT",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36")
settings.set("LOG_ENABLED", False)
crawler = CrawlerProcess(settings)
crawler.crawl(selogerSpider)
selogerSpider.signals.engine_started()
print("STARTING scraping")
crawler.start()
print("Scraping STOPPED")
try:
conn = stomp.Connection()
conn.set_listener('', MyListener())
conn.start()
""" conn = stomp.Connection([('0.0.0.0', 61613)])"""
conn.connect('admin', 'password', wait=True)
conn.subscribe(destination='/queue/test', id=1, ack='auto')
print('subscripe')
"""conn.send(body=' '.join(sys.argv[1:]), destination='/queue/test')"""
input("coucou")
"""conn.disconnect()"""
print('end')
except IOError as e:
print("error message")
解決方法は?
この問題は、ActiveMQとは関係ありません。シグナルの使い方を間違えているのです。シグナルは Pythonのドキュメント と記載されています。
Pythonのシグナルハンドラは、シグナルが他のスレッドで受信されたとしても、常にPythonのメインスレッドで実行されます。これは、シグナルがスレッド間通信の手段として使えないことを意味します。代わりにthreadingモジュールからの同期プリミティブを使用することができます。
また、新しいシグナルハンドラを設定できるのはメインスレッドのみです。
を使うのがいいと思います。
on_message
メソッドは、メッセージの受信が非同期であるため、独自のスレッドで実行されます。
要するに
ドンマイ
スレッドからのシグナルを使用します。の同期プリミティブを使用します。
スレッディングモジュール
代わりに もしシグナルの使用を避けられないのであれば、STOMPメッセージをメインスレッドで同期的に受信するために
ConnectionListener
.
関連
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python カメの描画コマンドとその例
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み] スレッドを強制終了させる方法はありますか?
-
[解決済み] Pythonの__future__は何に使うのか、いつ、どのように使うのか、その仕組みについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
pythonを使ったオフィス自動化コード例
-
Python jiabaライブラリの使用方法について説明
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない