python主线程执行_在Django vi中的主线程中执行Python函数
我创建了Django视图“graph”,目的是显示从matplotlib.pyplot模块。我编写了我的函数plot\u bubbles(返回amatplotlib.figure.figure对象)在脚本数据中_分析.py导入到视图.py脚本。在
Tkinter只能在主线程上运行,我的网页在我第一次请求时按预期工作,但在刷新或再次请求时它不显示图像。我的理解是,当视图再次被请求时,Django在一个新线程上操作代码。在from django.http import HttpResponse
from . import data_analysis
import Queue
import threading
q = Queue.Queue()
def graph(request):
parties = ["Conservative Party", "Labour Party", "Green Party", "UKIP"]
def from_other_thread(graph_function):
q.put(graph_function)
def main_thread_execute():
callback = q.get()
fig = callback
return fig
def grapher(arguments, area_variable):
data_analysis.plt.close('all')
from_other_thread(data_analysis.plot_bubbles(arguments, area_variable))
t = threading.Thread(target = grapher, args=(parties, data_analysis.all_data['2015 Pay']))
t.start()
t.join()
fig = main_thread_execute()
response = HttpResponse(content_type='image/png')
fig.savefig(response, format='png')
return response
其目的是在主线程中运行函数,以便Tkinter可以实际工作并创建图像我希望每次请求url时都创建图像,因为我将允许用户通过表单选择他想要可视化的变量,并将它们作为plot_bubbles函数的参数传递。在
我是django的初学者,从未在代码中使用过多线程,感谢您阅读本文。如有任何关于您的解决方案的解释,我们将不胜感激。在
编辑
不一定需要穿线。问题源于我的数据分析脚本生成绘图的方式。尤其是方法调用的代码matplotlib.pyplot.subplothttp://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplots生成一个带有4个轴对象的图形
^{pr2}$
这似乎导致Tkinter无法在主循环上运行,我还没有完全理解原因。这就是代码现在的样子#!/usr/bin/python
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
from pandas import Series, DataFrame
from pylab import figure, axes, plot, title, subplots
import statsmodels.api as sm
from sqlalchemy import create_engine
from matplotlib.backends.backend_agg import FigureCanvasAgg
import matplotlib
# Load data from database into dataframe
engine = create_engine("postgresql://user_name:password@localhost:5432/brexit")
all_data = pd.read_sql('''SELECT * FROM records;''', engine, index_col='Borough')
# Bubble Plot function creation
colors = np.random.rand(len(all_data.index))
area = []
def plot_bubbles(arguments, area_variable, space=0):
ah = iter(arguments)
eh = iter(arguments)
ih = iter(arguments)
kh = iter(arguments)
th = iter(arguments)
zh = iter(arguments)
mh = iter(arguments)
fig = figure(figsize=(30, 25))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
collection = [ax1, ax2, ax3, ax4]
for x in area_variable:
#want the bubbles to have an average area of 40, add a factor to increase the variability in size
factor = ((x-area_variable.mean())**2/400)
area.append(factor*x*(40/area_variable.mean()))
for ax in collection:
orient = all_data[ah.next()]
ax.set_ylabel('Leave %')
ax.set_xlim([max(0, all_data[zh.next()].min()-all_data[mh.next()].min()/3),
all_data[ih.next()].max()+all_data[th.next()].max()/7])
results = sm.OLS(all_data['Leave votes'], sm.add_constant(orient)).fit()
X_plot = np.linspace(orient.min()-0.05, orient.max(), 100)
ax.plot(X_plot, X_plot*results.params[1] + results.params[0], )
for label, ori, leave in zip(all_data.index, orient, all_data['Leave votes']):
ax.annotate(label, xy=(ori, leave), xytext=(ori, leave+0.05),
arrowprops={'facecolor':'black', 'connectionstyle':'arc3,rad=0.3', 'arrowstyle':'simple'})
ax.scatter(orient, all_data['Leave votes'], s=area, c=colors, alpha=0.6)
ax.set_title(kh.next())
fig.subplots_adjust(hspace=space, wspace=space)
return fig
随着图形和轴创建方式的改变,问题得到了解决。如果有人能解释一下为什么会这样,那就很有趣了。在
python主线程执行_在Django vi中的主线程中执行Python函数相关推荐
- asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...
http://blog.chedushi.com/archives/910 结论: 点评一下吧.django就是个渣,不多废话了.webpy的代码很简洁,可惜速度太慢了.bottle看起来快一点,不过 ...
- python 调用rpc服务_在Django项目中对Python函数进行RPC调用的优雅方式
我正在尝试创建一个django网站来访问MySQL数据库中的数据.其目的是在Dojo(javascript)中创建一个UI.另外,我希望django后端也提供webservices(RPC for p ...
- python dict批量选择_这一定是你见过最全面的python重点
由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西. Py2 VS Py3 print成为了函数,python2是关键字 不再有unicode对象,默认st ...
- 调用python接口并画图_【PySpark源码解析】教你用Python调用高效Scala接口
点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 机器之心专栏 作者:汇量科技-陈绪 众所周知,Spark 框架主要是由 Scala 语言实现,同时也包含少量 Java 代码.Spa ...
- animation 先执行一次 在持续执行_这一次,彻底弄懂 JavaScript 执行机制
本文来源:ssssyokihttps://juejin.im/post/6844903512845860872 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇 ...
- 青少年编程python一级真题_青少年编程能力等级测评试卷二及答案 Python编程(一级)...
青少年编程能力等级测评试卷 Python编程(一级) (考试时间90分钟,满分100分) 一.单项选择题(共20题,每题2.5分,共50分) 1. 运行下方代码段,输出是6,则输入的可能是( C ). ...
- python面试自我介绍_如何拿到半数面试公司Offer——我的Python求职之路
短短的一星期多一些,面试了9家公司,拿到5份Offer,可能是因为我所面试的公司都是些创业性的公司吧,不过还是感触良多,因为学习Python的时间还很短,没想到还算比较容易的找到了工作,就把这些天的面 ...
- 运维学python用不上_数读 | 为什么运维朋友们都需要学Python?
运维人员需不需要学开发?需不需要学Python?PythonN和Shell有什么区别?天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲. 现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能, ...
- python调用vb文件_【转载】利用VB生成APDL文件 和Python文件的方法
转载 利用VB生成APDL文件 和Python文件的方法 作者:李涛 欢迎关注:CAE技术分享 专注于CAE技术的分享和讨论. 1. 概述 Visual Basic作为一种可视化程序设计语言,应用相对 ...
最新文章
- [No000077]打造自己的Eclipse
- bug最后汇总-2018/08/03
- centos6mysql编译安装_centos6编译安装MySQL
- Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio
- [推荐]大量 Blazor 学习资源(三)
- 番石榴的EventBus –简单的发布者/订阅者
- 抓取各个浏览器引擎关键字,,百度学术关键字
- (原创)面向对象的系统对接接口编写。第4篇
- AD16修改规则加宽电源线与地线
- 关于windows server与SQL server用户数的解释 (转)
- 一个人学习3D视觉太痛苦了怎么办?
- 如何去除PDF的水印
- Axure RP9教程 入门讲解
- Linksys e3200初试tomato系统
- ESP32-C3入门教程 IoT篇⑤——阿里云 物联网平台 EspAliYun RGB LED 实战之设备生产流程
- 5.23 通过自定义筛选查找指定城市的指定工作人员 [原创Excel教程]
- python代码手机壁纸_Python制作微信好友背景墙教程(附完整代码)
- ICV:中国智能驾驶领跑全球,2026年L2级汽车销量将占全球44%
- 5.3 10篇美食类小红书爆文拆解【玩赚小红书】
- 离散数学:常用的数学符号
热门文章
- 【移植驱动到Linux3.4.2内核之一】移植DM9000C网卡驱动
- zookeeper 安装和使用
- 小程序·云开发实战 - 体重记录小程序
- SecureCRT SSH 语法高亮
- iOS本地推送UILocalNotification
- c# 相对路径的一些文献
- 非常实用的Asp.net常用的51个代码
- 【数据结构与算法】字符串匹配 BF算法 RK算法
- [Leedcode][JAVA][第355题][设计推特][面向对象][哈希表][链表][优先队列]
- 【模板】最新空web.xml模板