我是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的其他输出,因为它运行在同一个时间,然后“你好裤子”继续执行。
如果您有任何想法,请告诉我,我被困住了。
答案 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中运行。