小编Zac*_*ack的帖子

Python线程.如何锁定线程?

我正在尝试理解线程和并发的基础知识.我想要一个简单的情况,其中两个线程反复尝试访问一个共享资源.

代码:

import threading

class Thread(threading.Thread):
    def __init__(self, t, *args):
        threading.Thread.__init__(self, target=t, args=args)
        self.start()
count = 0
lock = threading.Lock()

def incre():
    global count 
    lock.acquire()
    try:
        count += 1    
    finally:
        lock.release()

def bye():
    while True:
        incre()

def hello_there():
    while True:
        incre()

def main():    
    hello = Thread(hello_there)
    goodbye = Thread(bye)

    while True:
        print count

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

所以,我有两个线程,都试图增加计数器.我认为如果线程'A'被调用incre(),那么lock就会建立起来,阻止'B'访问,直到'A'被释放.

运行时清楚地表明情况并非如此.您将获得所有随机数据竞争增量.

锁对象究竟是如何使用的?

编辑,另外,我已经尝试将锁定放在线程函数内部,但仍然没有运气.

python multithreading

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

有没有办法将函数存储在列表或字典中,以便在调用索引(或键)时触发存储的函数?

例如,我尝试了类似的东西mydict = {'funcList1': [foo(),bar(),goo()], 'funcList2': [foo(),goo(),bar()],但是没有用.

有这种功能的某种结构吗?

我意识到我可以用一堆def语句轻松地做到这一点:

def func1():
    foo()
    bar()
    goo()
Run Code Online (Sandbox Code Playgroud)

但是我需要的陈述数量变得非常笨拙且难以记住.将它们很好地包装在字典中会很好,我可以一次又一次地检查键.

python dictionary dispatch

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

Python IDLE.自动完成/显示完成无效

IDLE在实际显示自动完成菜单的时候非常狡猾.最近它根本没有工作,或者更具体地说,只在交互式会话期间工作.

我一直在使用Code Blocks for C,并且已经习惯了非常好的自动完成功能,所以没有它们有点令人沮丧 - 特别是在尝试学习新的框架工作以及与哪个类相关联时方法等等.

是否有一个简单的方法可以让IDLE自动完成再次工作?我正在使用python版本2.7.

是否有一个简单的编辑器我应该研究一下?我已经尝试过Vim,它对我的​​简单需求来说有点太重了,Ninja,我无法为任何事情工作,而Sublime文本2,我无法得到我的wxpython游戏.什么是一个不错的选择?任何类似于Code Blocks的东西都会很酷,但是,如果IDLE能够始终如一,我会非常满意!

请求澄清: 好的,所以看起来我可能有一些我的术语倒退了.通过非交互式,我的意思是,例如,右键单击py文件并选择"使用IDLE编辑".这提出了我认为可以描述为文本编辑器的内容.您可以在这里输入所有代码.准备好之后,然后点击F5,或选择Run,它会启动(我称之为)交互式终端.在这里,您可以输入代码,按回车键,并立即评估该代码.

我的问题是指前者,IDLE中编辑代码的部分.有时在打字时,经过一次.它将显示可用的方法,或者在打开括号后,它将给出关于预期值的提示.但问题是,有时它会做这些事情,有时却没有.

python autocomplete codeblocks python-idle

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

模糊模板匹配?

我试图围绕简历的基础知识.最初让我感兴趣的是模板匹配(在与CV无关的Pycon谈话中提到过),所以我想我会从那里开始.

我从这张图片开始:

来自SMB3的场景

其中我想检测马里奥.所以我把他剪掉了:

水管工

我理解在图像周围滑动模板以查看最合适的概念,并按照教程,我可以使用以下代码找到mario:

def match_template(img, template):
    s = time.time()
    img_size = cv.GetSize(img)
    template_size = cv.GetSize(template)

    img_result = cv.CreateImage((img_size[0] - template_size[0] + 1, 
                            img_size[1] - template_size[1] + 1), cv.IPL_DEPTH_32F, 1)
    cv.Zero(img_result)

    cv.MatchTemplate(img, template, img_result, cv.CV_TM_CCORR_NORMED)
    min_val, max_val, min_loc, max_loc = cv.MinMaxLoc(img_result)
    # inspect.getargspec(cv.MinMaxLoc)
    print min_val
    print max_val 
    print min_loc 
    print max_loc
    cv.Rectangle(img, max_loc, (max_loc[0] + template.width, max_loc[1] + template.height), cv.Scalar(120.), 2)
    print time.time() - s
    cv.NamedWindow("Result")
    cv.ShowImage("Result", img)
    cv.WaitKey(0)
    cv.DestroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

到目前为止一直很好,但后来我意识到这是非常脆弱的.它只会找到具有该特定背景的Mario,并且会显示特定的动画帧.

所以我很好奇,因为马里奥将始终拥有相同的马里奥主义属性,(大小,颜色)是否有一种技术,我可以找到他,无论他的当前框架是静止不动,还是其中一种运行循环精灵?有点像模糊匹配,你可以对字符串,但对于图像.

也许因为他是唯一的红色东西,有一种简单跟踪红色像素的方法吗?

另一个问题是从模板中删除背景.也许这会帮助MatchTemplate函数找到马里奥,即使他不完全符合模板?截至目前,我并不完全确定它是如何工作的(我看到MatchTemplate中有一个掩码参数,但我还需要进一步调查)

我的主要问题是模板匹配是否是检测大多数相同但变化的图像的方式(比如他走路时),还是我应该研究另一种技术?

更新:

试图匹配其他马里奥斯


关于mmgp的建议,它应该可以用于匹配其他东西,我做了几个测试.

我用它作为匹配的模板:

超级马里奥

然后拍了几张屏幕截图来测试匹配. …

opencv computer-vision

16
推荐指数
2
解决办法
9330
查看次数

是否有可能在Eclipse中突出一个语句,然后(在SublimeText等)按报价/等"包装"中的字符突出显示的文本?

我来自Sublime Text到Eclipse.我最喜欢的ST的特点是突出一段文字,然后能够通过按相应的键来包装它在报价或括号.

这可能很难解释功能,所以这是一个gif示例:

在此输入图像描述

因此,正如您所看到的,如果您突出显示一段文本,然后在此示例中按下(它将在括号中包含突出显示的文本.

当我在Eclipse中尝试这个时,突出显示文本,然后按下(简单地替换我突出显示的内容而不是将其包装起来.

有没有办法在Eclipse中获得此功能?

java eclipse

11
推荐指数
1
解决办法
1995
查看次数

我如何使用OpenCV MatchTemplate?

我试图在另一个中找到一个图像.

im = cv.LoadImage('1.png', cv.CV_LOAD_IMAGE_UNCHANGED)
    tmp = cv.LoadImage('e1.png', cv.CV_LOAD_IMAGE_UNCHANGED)
    w,h = cv.GetSize(im)
    W,H = cv.GetSize(tmp)
    width = w-W+1
    height = h-H+1
    result = cv.CreateImage((width, height), 32, 1)
    cv.MatchTemplate(im, tmp, result, cv.CV_TM_SQDIFF)
    print result
Run Code Online (Sandbox Code Playgroud)

当我运行它时,一切都执行得很好,没有错误被抛出.但我不确定从这里做什么.该文件称result商店"比较结果图".我试过打印它,但它给了我宽度,高度和步数.

如何使用此信息查找一个图像是否位于另一个图像中/它所在的位置?

python opencv image-processing computer-vision

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

有没有办法在任务栏中设置Pygame图标?set_icon()似乎只影响实际窗口中的小图标

在运行我的程序时,我配置的图标pygame.display.set_icon(icon)仅显示在窗口中.在任务栏中,默认的python图标保持不变.

有办法改变吗?

资源:

import pygame
from pygame.locals import *
import sys, os
import time

pygame.init()


# Load Images
try:
    bg = os.getcwd() + '\\images\\background.png'
    background = pygame.image.load(bg).convert()
except:
    print 'Error: Could not find background.png'

try:
    logo = os.getcwd() + '\\images\\logo.png'
    c_logo = pygame.image.load(logo).convert()
except:
    print 'Error: Could not find logo.png'

try:
    about_dialog_infile = os.getcwd() + '\\images\\about_dialog[alpha].png'
    about_dialog = pygame.image.load(about_dialog_infile).convert_alpha()
except:
    pass

i_icon = os.getcwd() + '\\images\\icon.png'
icon = pygame.image.load(i_icon)
pygame.display.set_icon(icon)
pygame.display.set_caption("Test program")
screenSize =(640,480)

screen = pygame.display.set_mode(screenSize,0,32)
pygame.display.set_caption('My …
Run Code Online (Sandbox Code Playgroud)

python pygame

9
推荐指数
3
解决办法
5642
查看次数

urllib2基本认证奇数

我用这个把头靠在墙上.我一直在尝试每个例子,阅读我可以在网上找到关于urllib2的基本http授权的最后一点,但我无法弄清楚导致我特定错误的原因.

令人沮丧的是,代码适用于一个页面,而不适用于另一个页面.登录www.mysite.com/adm非常顺利.它验证没问题.然而,如果我将地址更改为"http://mysite.com/adm/items.php?n=201105&c=200",我收到此错误:

<h4 align="center" class="teal">Add/Edit Items</h4>
<p><strong>Client:</strong> </p><p><strong>Event:</strong> </p><p class="error">Not enough information to complete this task</p>

<p class="error">This is a fatal error so I am exiting now.</p>
Run Code Online (Sandbox Code Playgroud)

搜索谷歌导致此错误信息为零.

adm是一个框架集页面,我不确定这是否相关.

这是当前的代码:

import urllib2, urllib
import sys

import re
import base64
from urlparse import urlparse

theurl = 'http://xxxxxmedia.com/adm/items.php?n=201105&c=200'
username = 'XXXX'
password = 'XXXX'

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl,username,password)

authhandler = urllib2.HTTPBasicAuthHandler(passman)

opener = urllib2.build_opener(authhandler)

urllib2.install_opener(opener)

pagehandle = urllib2.urlopen(theurl)

url = 'http://xxxxxxxmedia.com/adm/items.php?n=201105&c=200'
values = {'AvAudioCD': 1,
          'AvAudioCDDiscount': 00, 'AvAudioCDPrice': 50,
          'ProductName': 'python …
Run Code Online (Sandbox Code Playgroud)

python webforms urllib urllib2

8
推荐指数
1
解决办法
6056
查看次数

如何使用pyhook而不是pumpMessages()来使用自己的循环?

我正在尝试使用pyhooks来检测屏幕上任何地方的鼠标点击.问题是我只能使用PumpMessages().我希望它在我构建的while循环中运行.有没有办法实现这个/为什么它需要pumpMessages?

def onclick(event):
    print 'Mouse click!'
    return True


hm = pyHook.HookManager()

hm.MouseLeftDown = onclick

hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()
Run Code Online (Sandbox Code Playgroud)

以上是我可以让它运行的唯一方法.

我正在努力完成这样的事情:

sTime = time.time()

def onclick(event):
    global sTime
    print 'Time between clicks equals: %i' % time.time() - stime
    sTime = time.time()
    return True

hm.MouseLeftDown = OnClick

while True:

    hm.HookMouse()
Run Code Online (Sandbox Code Playgroud)

编辑:我不是一个聪明人.场景中不需要while循环.

叹..

python pyhook

7
推荐指数
2
解决办法
6647
查看次数

你如何研究python的内置方法的实现?

我目前正在修读基础compsci课程.我们经常使用Python in.我很好奇它的实现方式,强大的代码是什么in样的.

我可以想一想对这样的事情的实现是如何起作用的,但是我在完成一些家庭作业后学到的东西是我做事的方式通常非常糟糕和低效.所以我想开始调查'好'代码.

python

7
推荐指数
2
解决办法
1056
查看次数