小编Dir*_*uin的帖子

如何正确地pickle一个namedtuple实例

我正在学习如何使用泡菜.我创建了一个namedtuple对象,将其附加到列表中,并试图挑选该列表.但是,我收到以下错误:

pickle.PicklingError: Can't pickle <class '__main__.P'>: it's not found as __main__.P
Run Code Online (Sandbox Code Playgroud)

我发现,如果我运行代码而不将其包装在函数中,它就可以完美地运行.在函数内部包装时,是否需要额外的步骤来腌制对象?

这是我的代码:

from collections import namedtuple
import pickle

def pickle_test():
    P = namedtuple("P", "one two three four")
    my_list = []
    abe = P("abraham", "lincoln", "vampire", "hunter")
    my_list.append(abe)
    f = open('abe.pickle', 'w')
    pickle.dump(abe, f)
    f.close()

pickle_test()
Run Code Online (Sandbox Code Playgroud)

python pickle namedtuple python-2.7

45
推荐指数
4
解决办法
2万
查看次数

Tkinter:如何使用线程来防止主事件循环"冻结"

我有一个小的GUI测试,带有"开始"按钮和进度条.期望的行为是:

  • 单击开始
  • 进度条振荡5秒
  • 进度条停止

观察到的行为是"开始"按钮冻结5秒钟,然后显示进度条(无振荡).

到目前为止,这是我的代码:

class GUI:
    def __init__(self, master):
        self.master = master
        self.test_button = Button(self.master, command=self.tb_click)
        self.test_button.configure(
            text="Start", background="Grey",
            padx=50
            )
        self.test_button.pack(side=TOP)

    def progress(self):
        self.prog_bar = ttk.Progressbar(
            self.master, orient="horizontal",
            length=200, mode="indeterminate"
            )
        self.prog_bar.pack(side=TOP)

    def tb_click(self):
        self.progress()
        self.prog_bar.start()
        # Simulate long running process
        t = threading.Thread(target=time.sleep, args=(5,))
        t.start()
        t.join()
        self.prog_bar.stop()

root = Tk()
root.title("Test Button")
main_ui = GUI(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

基于从布赖恩奥克利的信息在这里,我明白,我需要使用线程.我尝试创建一个线程,但我猜测,因为线程是从主线程中启动的,所以没有用.

我有想法放置在不同的类中的逻辑部分,以及从该类,类似于由A.罗达斯示例代码内实例化GUI 这里.

我的问题:

我无法弄清楚如何编码它,以便这个命令:

self.test_button = Button(self.master, command=self.tb_click)
Run Code Online (Sandbox Code Playgroud)

调用位于另一个类中的函数.这是一件坏事还是可能?我如何创建一个可以处理self.tb_click的第二类?我试着跟随A. Rodas的示例代码,它的工作非常精彩.但是我无法弄清楚如何在触发动作的Button小部件的情况下实现他的解决方案.

如果我应该在单个GUI类中处理线程,那么如何创建一个不干扰主线程的线程呢?

python multithreading tkinter event-loop progress-bar

43
推荐指数
4
解决办法
7万
查看次数

Tkinter Grid:如何定位小部件,使它们不会粘在一起

我正在尝试创建两个Label小部件,它们位于我的测试UI的左上角和右上角.问题是小部件粘在一起,我希望它们之间有空间.

在我的研究中,我遇到了使用粘性,padx和pady选项的建议.但无论我传递给.grid()的参数是什么,我似乎都无法在我的小部件之间创建空间.我知道,无论两个小部件之间的列数和行数是多少,如果所述行/列都是空的,那么它就好像它们不存在并且小部件看起来粘在一起.

使用.grid()方法,如何定位小部件以使它们不会粘在一起?

到目前为止,这是我的代码:

#!/usr/bin/python
from Tkinter import *

class MyApp:
    def __init__(self, parent):
        self.myParent = parent
        self.main_container = Frame(parent)
        self.main_container.grid(row=0, rowspan=2, column=0, columnspan=4)

        self.top_frame = Frame(self.main_container)
        self.top_frame.grid(row=0, column=0, columnspan=4)

        self.top_left = Frame(self.top_frame)
        self.top_left.grid(row=0, column=0, columnspan=2)

        self.top_right = Frame(self.top_frame)
        self.top_right.grid(row=0, column=2, columnspan=2)

        self.bottom_frame = Frame(self.main_container)
        self.bottom_frame.grid(row=2, column=0, columnspan=4)

        self.top_left_label = Label(self.top_left, text="Top Left")
        self.top_left_label.grid(row=0, column=0, sticky='W', padx=2, pady=2)

        self.top_right_label = Label(self.top_right, text="Top Right")
        self.top_right_label.grid(row=0, column=4, sticky='E', padx=2, pady=2)

        self.text_box = Text(self.bottom_frame, height=5, width=40)
        self.text_box.grid(row=0, column=0)

root = Tk()
root.title("Test UI") …
Run Code Online (Sandbox Code Playgroud)

python tkinter

18
推荐指数
1
解决办法
7万
查看次数

使用jQuery更改活动的Bootstrap 3选项卡

我正在尝试使用jQuery以编程方式更改选项卡.我尝试在这里实现@MasterAM给出的解决方案.但是,Chrome控制台会显示错误Uncaught TypeError: undefined is not a function

这是我的HTML:

<div id="click-me-div">Click Me</div>

 <ul class="nav nav-tabs">
    <li class="active"><a href="#fruits" data-toggle="tab">I like Fruits</a></li>
    <li><a href="#veggies" data-toggle="tab">I like Veggies Too</a></li>
    <li><a href="#samosas" data-toggle="tab">But Samosa's Rock</a></li>
</ul>

<div class="tab-content">
    <div class="tab-pane active" id="fruits">Apple, Kiwi, Watermellon</div>
    <div class="tab-pane" id="veggies">Kale, Spinach, Pepper</div>
    <div class="tab-pane" id="samosas">Awesome, Spine Tingling, Explosive</div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是jQuery:

$(document).ready(function() {
    $("#click-me-div").click(function() {
        alert('yes, the click actually happened');
        ('.nav-tabs a[href="#samosas"]').tab('show');
    });
});
Run Code Online (Sandbox Code Playgroud)

期望的结果是,如果我单击"单击我",则活动选项卡应更改为"samosas"选项卡.

我究竟做错了什么?

html javascript jquery twitter-bootstrap-3

17
推荐指数
1
解决办法
4万
查看次数

Perl警告:在串联(.)或字符串中使用未初始化的值

我无法弄清楚为什么正则表达式模式不匹配.此外,输出抱怨$found没有初始化,但我相信我这样做了.到目前为止,这是我的代码:

use strict;
use warnings;

my @strange_list = ('hungry_elephant', 'dancing_dinosaur');

my $regex_patterns = qr/
    elephant$
    ^dancing
    /x;

foreach my $item (@strange_list) {
    my ($found) = $item =~ m/($regex_patterns)/i;
    print "Found: $found\n";
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

Use of uninitialized value $found in concatenation (.) or string at C:\scripts\perl\sandbox\regex.pl line 13.
Found:
Use of uninitialized value $found in concatenation (.) or string at C:\scripts\perl\sandbox\regex.pl line 13.
Found:
Run Code Online (Sandbox Code Playgroud)

我需要以$found其他方式初始化吗?另外,我是否正确创建了一个多行字符串来解释为正则表达式?

非常感谢.

regex perl

13
推荐指数
1
解决办法
4万
查看次数

Django REST框架 - 发布包含自然键的外键字段?

我最近开始使用Django REST Framework(以及Django和Python - 我是一个RTOS /嵌入式系统人员!)来实现RESTful Web API.还没有任何问题,但谷歌无法解决这个问题,但是现在这个问题让我感到难过了几个小时.

我有一个嵌入式系统,可以监听与一系列设备相关的事件 - 类似于电话拨打电话,这是我为了简洁而在此讨论的内容.电话有一个号码和一大堆与之相关的呼叫(它已经制作).呼叫具有关联的电话(拨打电话的电话)和创建时间.发生调用时,应将其POST到API.我有一个嵌入式系统,可以监听呼叫及其始发电话号码,并将其提交给API.由于嵌入式系统知道电话号码,我希望它提交:{"srcPhone":12345678}而不是{"srcPhone":"http://host/phones/5"}.这避免了我的嵌入式系统需要知道每个电话的主键(或每次想要提交呼叫时按号码获取GET电话).

Google和Django文档建议我可以用自然键实现这一点.我的尝试如下:

models.py

from django.db import models
from datetime import datetime
from pytz import timezone
import pytz
from django.contrib.auth.models import User

# Create your models here.
def zuluTimeNow():
    return datetime.now(pytz.utc)


class PhoneManager(models.Manager):
    def get_by_natural_key(self, number):
        return self.get(number=number)


class Phone(models.Model):
   objects     = PhoneManager()
   number      = models.IntegerField(unique=True)

   #def natural_key(self):
   #    return self.number

   class Meta:
      ordering = ('number',)


class Call(models.Model):
    created    = models.DateTimeField(default=zuluTimeNow, blank=True)
    srcPhone   = models.ForeignKey('Phone', related_name='calls')

    class …
Run Code Online (Sandbox Code Playgroud)

django django-models django-rest-framework

12
推荐指数
1
解决办法
9300
查看次数

在Django中只允许一个模型实例

我想使用数据库模型控制项目的一些配置设置.例如:

class JuicerBaseSettings(models.Model):
    max_rpm = model.IntegerField(default=10)
    min_rpm = model.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)

应该只有这个模型的一个实例:

juicer_base = JuicerBaseSettings()
juicer_base.save()
Run Code Online (Sandbox Code Playgroud)

当然,如果有人意外地创建了一个新实例,那么这不是世界末日.我可以这样做JuicerBaseSettings.objects.all().first().但是,有没有办法将其锁定,以至于无法创建多个实例?

我在SO上发现了两个相关的问题.这个答案建议使用第三方应用程序django-singletons,这些应用程序似乎没有得到积极维护(git repo的最新更新是5年前).另一个答案建议使用权限或权限的组合OneToOneField.这两个答案都是2010-2011.

鉴于Django从那时起经历了很多变化,有没有任何标准方法可以解决这个问题?或者我应该使用.first()并接受可能存在重复的内容?

python django

8
推荐指数
3
解决办法
5246
查看次数

Python:处理json.load()vs json.loads()中的换行符

根据这个答案,应始终转义JSON字符串中的换行符.当我加载JSON时,这似乎不是必需的json.load().

我已将以下字符串保存到文件中:

{'text': 'Hello,\n How are you?'}
Run Code Online (Sandbox Code Playgroud)

加载JSON json.load()并不会引发异常,即使\n没有转义:

>>> with open('test.json', 'r') as f:
...   json.load(f)
...
{'text': 'Hello,\n How are you?'}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用json.loads(),我会得到一个例外:

>>> s
'{"text": "Hello,\n How are you?"}'
>>> json.loads(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python34\lib\json\__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "c:\Python34\lib\json\decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "c:\Python34\lib\json\decoder.py", line 359, in raw_decode
    obj, …
Run Code Online (Sandbox Code Playgroud)

python json python-3.4

8
推荐指数
2
解决办法
5480
查看次数

Django:django-tables2分页和过滤

我有一个由django-tables2生成的工作表:

my_filter = TestFilter(request.POST) 
table = TestTable(TestObj.objects.all(), order_by="-my_date")
RequestConfig(request, paginate={"per_page": 10}).configure(table)
return render(request, 'test_app/index.html', {'table': table, 'my_filter': my_filter})
Run Code Online (Sandbox Code Playgroud)

上面的代码返回一个包含数百个对象的表,这些对象整齐地分页,每页有10个项目.当我点击表格底部的"下一步"时,分页效果很好,我可以浏览不同的页面.但是,我注意到以下行为:

  • 单击my_filter其上显示原始未过滤表的子集
  • 单击筛选表底部的"下一步"将显示未筛选表的第二页
  • my_filter再次单击将显示已过滤表的第二页

我希望过滤器在导航不同页面时保持不变.我在这里发现了类似的问题.该解决方案表明需要更改html代码.但是,在我的情况下,django-tables2正在生成html.

如何使用django-tables2正确实现过滤分页?

-Update-

我尝试过使用GET而不是POST:

if request.method == 'GET':
    my_filter = TestFilter(request.GET)
    my_choice = my_filter.data['my_choice']
    table = TestTable(TestObj.objects.filter(choice=my_choice), order_by="-my_date")
    RequestConfig(request, paginate={"per_page": 10}).configure(table)
    return render(request, 'test_app/index.html', {'table': table, 'my_filter': my_filter})
Run Code Online (Sandbox Code Playgroud)

我的模板:

<form action="" method="get"> {% csrf_token %}
    {{ my_filter }} <input type="submit" value="Apply Filter"/>
</form>
Run Code Online (Sandbox Code Playgroud)

由于my_choiceGET中不存在KeyError,因此会导致KeyError .结果页面甚至没有加载.

python django django-tables2

6
推荐指数
1
解决办法
1万
查看次数

使用多处理或线程加速单个任务

是否可以使用多处理/线程加速单个任务?我的直觉是答案是'不'.以下是"单一任务"的含义示例:

for i in range(max):
    pick = random.choice(['on', 'off', 'both'])
Run Code Online (Sandbox Code Playgroud)

参数为10000000,在我的系统上完成大约需要7.9秒.

我基本掌握了如何使用多处理和线程处理多个任务.例如,如果我有10个目录,每个目录包含需要读取的X个文件,我可以使用create 10个线程.

我怀疑单个任务只使用一个进程(任务管理器报告CPU使用率很小).在这种情况下,有没有办法利用我的其他核心?或者是增加CPU /内存速度是获得更快结果的唯一方法?

python multithreading multiprocessing python-2.7

5
推荐指数
1
解决办法
6931
查看次数