2017-07-14 7 views
0

私はPythonには新しく、私の無知を許してください。私はメインファイルと同時に実行するプロセスを取得しようとしています。私が持っているユースケースは、私のフラスコ/ pythonアプリケーションがCRUD要求を受け入れると同時に、ゲームのポイントを変更したい(すべてのユーザーのポイントを追加/調整する)ことです。私おそらく真夜中の実行のためにこれをスケジュールするかもしれませんが、将来的に私はユーザーの入力に応じてポイントに複数の変更を加えることがあります。基本的には、本当に何らかのスレッド機能を使いたいと思っています。Pythonのスレッドブロックのメイン

残念ながら、私のスレッドはmainの操作をブロックします。なぜ私はスレッドの全体のポイントは、同時に実行されたと思っていたのか分かりません。ここで

は私がメインの私の関数を呼び出す方法です:

from flask_restful import abort, reqparse, Resource 
from marshmallow import Schema, fields, ValidationError, pre_load 
from flask import Flask, Blueprint, request, jsonify 
from flask_cors import CORS, cross_origin 
import psycopg2 
import os 
from os.path import join, dirname 
import threading 
from time import sleep 

class Inflate: 
    def __init__(self, s): 
     self.s = s 
    def printtest(self): 
     print('insided the printtest for inflation') 
    def hello(self, h): 
     print h + self.s 
    def timermethod(self): 
     h="hello there " 
     for i in range(5): 
      t = threading.Thread(target=self.hello, args=(h,)) 
      t.start() 
      sleep(2) 

出力が「こんにちはパンツ」であるということです:私はそれらを定義したとしてここ

i = Inflate('pants') 
i.timermethod() 

は、クラスやメソッドです私の主な機能が実行される前に5回印刷されていましたが、「hello there pants」が一度印刷されることを期待したいのですが、同時に実行されるmainからの他の出力を見て、その後「hello there pants」を実行します。

ご意見がありましたら教えてください。私は立ち往生しています。

+0

各スレッドの開始後に2分間スリープするので、次回起動するまでに各スレッドが完了し、スリープ状態が解除され、結果に期待通りの結果が表示されることがありますが、あなたはまだ別のものを開始する前に終了しますが、あなたはおそらく5 'こんにちは' – user3012759

+0

が表示されますが、それからメインフレームをブロックするスレッドでn秒ごとに待機条件を設定しますか?何らかの形で別のスレッドを実行する前に、ある期間待たなければなりません。 –

+0

なぜあなたは待つ必要がありますか? – user3012759

答えて

1

i.timermethod()を呼び出すと、2秒間5回スリープしてから戻ることができます。

0

睡眠ブロック。別のスレッドからtimermethodを実行する必要があります。

試してみてください。代わりに

t = Thread(target=i.timermethod) 
t.start() 

print "i will print immediately" 

# print test will run 5 times in 5 separate threads, once every 2 secs 

:あなたのメインスレッドから

i.timermethod() 

# print test will run 5 times in 5 separate threads, once every 2 secs 

print "i have to wait for timermethod() to finish" 

#code that gets blocked 

明示的ににする必要があります。独自のスレッドでtimermethodを呼び出すようにpythonに指示します。それ以外の場合は、mainで実行されます。

+0

を実行していると思っていたものです。しかし、実行サイクル間にある程度の時間を持ちたいという問題は解決しません。スレッドをもう一度実行するとすぐにスレッドが実行されます。私は "非睡眠睡眠"が必要です。 –

+0

いいえ、timermethodを独自のスレッドで実行すると、 "スリープ"が実行され、メインスレッドではなく別のスレッドでブロックされます。独自のスレッドから、あなたは欲しいかもしれませんが、あなたは眠ることができます。コード内に –

+0

がある場合、メインスレッドでsleepを呼び出してブロックしています。理にかなった希望 –

関連する問題