uWSGIを使用したPython3スレッド

n4nn31355

私は多くの時間を無駄にしましたが、解決策を見つけることができませんでした。
uwsgiでデプロイされたアプリでスレッドを使用すると、スレッドが同期されません。

ここに例(wsgi.py)の簡単なコードがあります:

from time import sleep
import threading

i = 0
def daemon():
  global i
  while True:
    i += 1
    print(i)
    sleep(3)
th = threading.Thread(target=daemon, args=())
th.start()

def application(environ, start_response):
  start_response('200 OK', [('Content-Type','text/html')])
  return [str(i).encode()]

そして、このアプリを実行iするとログが増加しますが、1ブラウザーからのmakeリクエスト時に常に取得します(または最初のインクリメントの0に移動した場合は取得します)uwsgi.threadデコレーターを試しましたが、同じ結果が得られました。sleep(3)i

uwsgi config:

[uwsgi]
socket = 127.0.0.1:3034
plugins-dir = /srv/uwsgi
plugin = python34
uid = py3utils
gid = py3utils
chdir = /srv/python/3/py3utils/tht/app/
wsgi-file = wsgi.py
enable-threads = true
daemonize = %(chdir)/../uwsgi.log
master = true
die-on-term = true
touch-reload = ../uwsgi_restart.txt

*英語でごめんなさい

warvariuc

これは、アプリケーションをインポートした後、マスタープロセスがワーカーにフォークするために発生します。

spawned uWSGI master process (pid: 7167)
spawned uWSGI worker 1 (pid: 7169, cores: 1)
spawned uWSGI http 1 (pid: 7170)

したがって、印刷するスレッドiはマスタープロセスで実行されており、リクエストはワーカーによって処理されます。フォーク中のワーカーはi1に等しいと見なします。sleepインクリメントする前に移動するとi、プロセスは最初のインクリメントの前にフォークすることができます。

次のようなものを使用する必要がありますuwsgidecorators.thread

from time import sleep
import threading
import uwsgidecorators

i = 0

@uwsgidecorators.postfork
@uwsgidecorators.thread
def daemon():
  global i
  while True:
    i += 1
    print(i)
    sleep(3)

def application(environ, start_response):
  start_response('200 OK', [('Content-Type','text/html')])
  return [str(i).encode()]

メインスレッド以外のスレッドは、フォーク中にコピーされません。

または使用:

[uwsgi]
master = false

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python3を使用したAWSラムダでのマルチスレッド

分類Dev

geventとスレッドを使用したUwsgi

分類Dev

Python3のconcurrent.futuresスレッドプールを使用したスレッド実行関数の識別

分類Dev

スレッドが不足している:UWSGI + GeventHTTPClientを使用したマルチスレッドPythonアプリケーション

分類Dev

Python3を使用したWebスクレイピングyoutube

分類Dev

Python3を使用したWebスクレイピング

分類Dev

Python3を使用したGoogleバックエンドoAuth?

分類Dev

Python3を使用したWebスクラッピング

分類Dev

Python3を使用してスレッド内でyoutube-dlのダウンロードを停止する方法

分類Dev

.start()を組み合わせたPython3スレッドは、結合属性を作成しません

分類Dev

キューを使用してpython3でtkinterをスレッド化する方法は?

分類Dev

Python3でバックスラッシュを使用した正規表現

分類Dev

キーボード入力を使用したRaspiAutostart Python3スクリプト?

分類Dev

Python3で現在のスレッドを印刷する

分類Dev

pyimportをpython3にアップグレードします

分類Dev

スレッドを使用したクラスの初期化(Python)

分類Dev

Amazonはbs4を使用してPython3のスクレイピングをブロックしました

分類Dev

Python3を使用したNetCDF時系列スライス

分類Dev

ネストされたforループ、python3のBeautifulSoupを使用したWebスクレイピング

分類Dev

python3を使用してjsonをデータフレームにネストしました

分類Dev

Python3のMagicメソッドを使用したユークリッド距離の計算

分類Dev

Python3を使用したGAEを使用したクラウドタスクとクラウドデータストアを使用したローカル開発

分類Dev

Python3リストを使用してスタック

分類Dev

Python3を使用したTwitchボット

分類Dev

PythonとCapiを使用したマルチスレッド

分類Dev

Pythonとpymongoを使用したマルチスレッド

分類Dev

Pythonループを使用したマルチスレッド

分類Dev

time.sleepを使用したPythonでのスレッド化

分類Dev

Python2.7を使用したGoogleAppEngineのスレッド

Related 関連記事

  1. 1

    Python3を使用したAWSラムダでのマルチスレッド

  2. 2

    geventとスレッドを使用したUwsgi

  3. 3

    Python3のconcurrent.futuresスレッドプールを使用したスレッド実行関数の識別

  4. 4

    スレッドが不足している:UWSGI + GeventHTTPClientを使用したマルチスレッドPythonアプリケーション

  5. 5

    Python3を使用したWebスクレイピングyoutube

  6. 6

    Python3を使用したWebスクレイピング

  7. 7

    Python3を使用したGoogleバックエンドoAuth?

  8. 8

    Python3を使用したWebスクラッピング

  9. 9

    Python3を使用してスレッド内でyoutube-dlのダウンロードを停止する方法

  10. 10

    .start()を組み合わせたPython3スレッドは、結合属性を作成しません

  11. 11

    キューを使用してpython3でtkinterをスレッド化する方法は?

  12. 12

    Python3でバックスラッシュを使用した正規表現

  13. 13

    キーボード入力を使用したRaspiAutostart Python3スクリプト?

  14. 14

    Python3で現在のスレッドを印刷する

  15. 15

    pyimportをpython3にアップグレードします

  16. 16

    スレッドを使用したクラスの初期化(Python)

  17. 17

    Amazonはbs4を使用してPython3のスクレイピングをブロックしました

  18. 18

    Python3を使用したNetCDF時系列スライス

  19. 19

    ネストされたforループ、python3のBeautifulSoupを使用したWebスクレイピング

  20. 20

    python3を使用してjsonをデータフレームにネストしました

  21. 21

    Python3のMagicメソッドを使用したユークリッド距離の計算

  22. 22

    Python3を使用したGAEを使用したクラウドタスクとクラウドデータストアを使用したローカル開発

  23. 23

    Python3リストを使用してスタック

  24. 24

    Python3を使用したTwitchボット

  25. 25

    PythonとCapiを使用したマルチスレッド

  26. 26

    Pythonとpymongoを使用したマルチスレッド

  27. 27

    Pythonループを使用したマルチスレッド

  28. 28

    time.sleepを使用したPythonでのスレッド化

  29. 29

    Python2.7を使用したGoogleAppEngineのスレッド

ホットタグ

アーカイブ