线程块主要在Python中

时间:2017-07-14 16:20:20

标签: python multithreading blocking thread-sleep

我是python的新手,所以请原谅我的无知。我试图让一个进程与我的主文件同时运行。我的用例是我想在我的flask / python应用程序接受CRUD请求的同时改变游戏的点数(为所有用户添加/调整点数)。我可能可能只计划午夜运行或其他什么,但将来我可能想根据用户输入对点进行多次更改。基本上,我真的想使用某种线程功能。

不幸的是,我的线程阻止了main的操作。我不知道为什么,因为我认为线程的重点在于它同时运行。

以下是我从main调用我的函数的方法:

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

以下是我定义它们的类和方法:

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)

输出是“hello there pants”在我的main函数执行之前打印了5次,而我希望/想要“hello there pants”打印一次,看看main的其他输出,因为它运行在同一个时间,然后“你好裤子”继续执行。

如果您有任何想法,请告诉我,我被困住了。

2 个答案:

答案 0 :(得分:1)

你打电话给i.timermethod(),它会在返回前睡5秒钟。

答案 1 :(得分: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

来自你的主线程。你需要显式地告诉python在自己的线程中调用timermethod,否则它将在main中运行。