我遇到Python线程问题并在参数中发送字符串.
def processLine(line) :
print "hello";
return;
Run Code Online (Sandbox Code Playgroud)
.
dRecieved = connFile.readline();
processThread = threading.Thread(target=processLine, args=(dRecieved));
processThread.start();
Run Code Online (Sandbox Code Playgroud)
其中dRecieved是连接读取的一行字符串.它调用一个简单的函数,到目前为止只有一个打印"hello"的工作.
但是我收到以下错误
Traceback (most recent call last):
File "C:\Python25\lib\threading.py", line 486, in __bootstrap_inner
self.run()
File "C:\Python25\lib\threading.py", line 446, in run
self.__target(*self.__args, **self.__kwargs)
TypeError: processLine() takes exactly 1 arguments (232 given)
Run Code Online (Sandbox Code Playgroud)
232是我试图传递的字符串的长度,所以我猜它会将其分解为每个字符并尝试传递这样的参数.如果我只是正常调用函数,它工作正常,但我真的想将它设置为一个单独的线程.
我想通过使用flask-script来实现一个可以停止烧瓶应用的命令.我已经搜索了一段时间的解决方案.因为框架不提供"app.stop()"API,所以我很好奇如何编写代码.我正在研究Ubuntu 12.10和Python 2.7.3.
如何正确终止在单独线程中启动的 Flask Web 应用程序?我发现了一个不完整的答案,不清楚如何去做。下面的脚本启动一个线程,该线程又启动一个 Flask 应用程序。当我按CTRL+ 时C,某些内容不会被终止,并且脚本永远不会停止。在正确except KeyboardInterrupt:终止app和之后添加代码会很好thread_webAPP()。我知道如何终止线程,但首先我需要终止应用程序:
def thread_webAPP():
app = Flask(__name__)
@app.route("/")
def nothing():
return "Hello World!"
app.run(debug=True, use_reloader=False)
# hope that after app.run() is terminated, it returns here, so this thread could exit
t_webApp = threading.Thread(name='Web App', target=thread_webAPP)
t_webApp.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("exiting")
# Here I need to kill the app.run() along with the thread_webAPP
Run Code Online (Sandbox Code Playgroud) 我正在向基于插件的应用程序添加 Flask 支持。启动时,应用程序会实例化许多插件类。我认为这就像在类初始化时启动 Flask 一样简单,但相反,当它点击 Flask 启动方法时,整个应用程序会挂起。
考虑以下示例:
#!/usr/bin/env python
from flask import Flask
class TestClass:
def __init__(self):
print('Initializing an instance of TestClass')
self.app = Flask(__name__)
self.app.run()
print("Won't get here until Flask terminates!")
foo = TestClass()
Run Code Online (Sandbox Code Playgroud)
在 Flask 终止之前,不会评估第二个打印行。
有没有一种明智的方法可以强制app.run进入后台,以便类继续其初始化步骤,同时仍然能够在类的其余部分中与 Flask 进行通信?
我在尝试使用 Dash (绘图)创建仪表板并使用 PyQt5 创建的 GUI 时遇到问题。
我尝试将以下示例代码作为模块并放在代码末尾:
import dash
import dash_core_components as dcc
import dash_html_components as html
def run_dash(data, layout):
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''
Dash: A web application framework for Python.
'''),
dcc.Graph(
id='example-graph',
figure={
'data': data,
'layout': layout
}
)
])
app.run_server(debug=True)
Run Code Online (Sandbox Code Playgroud)
但每次我收到错误can't find '__main__' module in ''
我知道最初,要创建 Dash,需要使用如下所示的主防护:
if __name__ == '__main__':
app.run_server(debug=True)
Run Code Online (Sandbox Code Playgroud)
但我的主窗口已经有了一个主防护,所以我不知道如何使两者一起工作。作为参考,这是我的 MainWindow 主防护:
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud) 我有一个作为服务器的 Flask 应用程序,我有一个作为服务器前端的 kivy 应用程序。如何运行flask然后运行kivy应用程序,以便它们同时运行?
烧瓶应用程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello'
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
基维应用程序:
from kivy.app import App
from kivy.builder import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
kivy.require('1.10.0')
Builder.load_file('kivy.kv')
sm = ScreenManager()
class MainScreen(Screen)
pass
class OtherScreen(Screen)
pass
sm.add_widget(MainScreen(name='main'))
sm.add_widget(OtherScreen(name='other'))
class MyApp(App):
def build(self):
return sm
MyApp().run()
Run Code Online (Sandbox Code Playgroud)
更新: 如果有人在使用 apache 实现网络服务器时遇到问题,在我看来,尝试使用 docker,更简单、更快的解决方案!