小编Tim*_*der的帖子

"无限循环"之后:永远不会进入主循环

这是我的第一篇文章.我在两个月前考虑职业交换时开始编码,正在研究俄罗斯方块克隆.我已经实现了大部分核心功能,但无法通过后循环让游戏不断刷新.

我正在使用Tkinter来制作我的Gui并且正在尝试面向事件的编程.

我的理解是,after(Time, Event)Tkinter应安排任何的Event回调函数是由指定的延迟后发生Time.我认为代码应该在此之后继续执行后续项目.

我的帧刷新函数(game.updateBoard())执行俄罗斯方块工作的大部分必要事件,然后使用after调用自身.初始化游戏实例时我会调用一次.

mainloop()game.updateboard()函数不是继续进行,而是after无限期地调用自身.

我怀疑它的表现并不像我认为的那样after,在指定的延迟发生之前继续执行脚本.我认为它正在等待回调终止继续.

我试图找到一个资源,但不能.

如果您有解决此问题,附加代码或一般编码的建议,我很高兴听到它们!这是一个学习过程,我很乐意尝试你提出的任何建议.

以下是代码的相关部分:

class game():
    def __init__(self): #Set up board and image board
        self.pieces = ["L","J","S","Z","T","O","I"]
        self.board = boardFrame()
        self.root = Tk()
        self.root.title("Tetris")
        self.root.geometry("250x525")

        self.frame = Frame(self.root)

        #set up black and green squares for display
        self.bSquare = "bsquare.gif"
        self.gSquare = "square.gif"
        self.rSquare = "rsquare.gif"
        self.image0 = PhotoImage(file = self.bSquare)
        self.image1 = PhotoImage(file = self.gSquare)
        self.image2 = …
Run Code Online (Sandbox Code Playgroud)

python tkinter event-handling tetris

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

Python和argparse:如何根据第一个参数改变所需的附加参数?

我的目标是使用argparse编写一个Python命令行实用程序,该实用程序具有多个命令,每个命令都有不同的必需输入集.

我尝试阅读文档,一些谷歌搜索,堆栈溢出,找不到任何东西.我可以想到一些可能的解决方案,但它们很难看,需要手动处理帮助文档和验证.我怀疑这是一个普遍有效的解决方案已经足够了解的问题,我只是缺乏搜索它的正确术语,或者它是一个很小的边缘,它没有张贴在不少地方.

我现在最好的想法是有一个位置参数,并且根据该输入的值以某种方式对一组附加参数有不同的要求.也许我会解析两次?

例如,这是一个类似的情况:

有一个位置论证,动物

动物的选择是猫,蜥蜴,鱼

对于猫,需要参数爪,胡须,爪子

对于蜥蜴,参数scale_color,favorite_food是必需的

对于鱼类,需要参数water_type

我们希望在-h中记录每个不同动物值所需的额外参数,而不需要采用非正统的做法.

我考虑过为每个主要类别选择提供一个可选参数.这是没有吸引力的,因为该实用程序实际上只想采取其中一个参数,如果我可以避免在强制执行和记录这个方面重新发明轮子,我宁愿这样做.

我可以这样做:

valid_commands = ['a','b','c','d','e','f','g']
parser.add_argument('command', choices = valid_commands)
parser.add_argument('inputs', nargs = '*')
Run Code Online (Sandbox Code Playgroud)

但是,我没有对每个命令选择的附加参数进行良好的输入检查.

这有什么正常的方法吗?当然,编写一个具有多个可能命令的实用程序以及每个命令的不同必需参数是相当普遍的.通过添加手动检查和帮助文档,我绝对可以获得大多数我想要的东西,但这种情况我可能会做足够多次,以便在第一次尝试时做到这一点是值得的.

感谢您阅读并告诉我是否可以提供相关信息.

python command-line-arguments argparse

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

Python习惯用法可以多次调用os.path.dirname获得相同的结果吗?

我发现自己需要在源树中获取python文件的父目录,该源目录树是多个目录,具有一定的规律性.不得不多次打电话给dirname是笨重的.

我环顾四周,很惊讶没有发现这个帖子.

一般情况是:

import os.path as op
third_degree_parent = op.dirname(op.dirname(op.dirname(op.realpath(__file__))))
Run Code Online (Sandbox Code Playgroud)

是否有更惯用的方法来执行此操作,不需要嵌套的dirname调用?

python build filepath dirname os.path

7
推荐指数
3
解决办法
1448
查看次数

Spark Streaming + Kafka:无法计算拆分,阻止输入......未找到

在Google/SO上挖掘之后 - 我还没有找到关于这个的好资源.

我正在使用Java与Kafka使用者一起运行Spark Streaming 1.2.当我进行更大的输入测试时,大约一半的阶段失败了:

Job aborted due to stage failure: Task 0 in stage 505.0 failed 4 times, most recent failure: Lost task 0.3 in stage 505.0 (TID 9953, ec2-54-149-87-18.us-west-2.compute.amazonaws.com): java.lang.Exception: Could not compute split, block input-0-1426033579400 not found
    at org.apache.spark.rdd.BlockRDD.compute(BlockRDD.scala:51)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:61)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:228)
    at org.apache.spark.rdd.FlatMappedRDD.compute(FlatMappedRDD.scala:33)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
    at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:61)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:228)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:68)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)
    at org.apache.spark.scheduler.Task.run(Task.scala:56)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:196)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

该管道看起来像是来自Kafka的JavaPairRecieverInputDStream,一个flatkaToPair调用,它将Kafka数据转换为JavaPairDStream,然后是groupByKeyAndWindow以获取一些批次,然后是foreachRDD调用,将批量写入数据存储区.

所有DStream都设置为.persist(StorageLevel.MEMORY_AND_DISK()).

失败完全在flatMapToPair调用中.对于这些,失败的阶段在非常(可疑的?)平坦分布中具有1-9分钟的等待时间.

我找不到关于如何清除这些数据的任何信息 - 我在这个用例中遗漏了什么?我可以盲目地做一些事情,试图确保所有阶段都快速运行,但我想了解导致这种情况发生的机制,如果它是由于延迟阶段的结果.

这个问题是同一个问题,但出版商并没有落后,因此受访者留下了答案.这个系统肯定会备份,所以我认为这个问题占据了一个单独的空间. …

java apache-kafka apache-spark spark-streaming

5
推荐指数
0
解决办法
3275
查看次数

为什么连接字符串比连接它们更快?

据我所知,".join(iterable_of_strings)是连接字符串的首选方法,因为它允许优化,避免必须将不可变对象重写到内存的次数超过必要时间.

在表达式中添加字符串可靠地运行得比为它进行适度大量操作而加入它们更快.

我在加入时获得了大约2.9-3.2秒的时间,并且在我的笔记本电脑上使用Python 3.3添加了运行此代码的2.3-2.7.谷歌搜索这个我找不到一个好的答案.有人可以解释可能发生的事情或指导我找到一个好的资源吗?

import uuid
import time

class mock:
    def __init__(self):
        self.name = "foo"
        self.address = "address"
        self.age = "age"
        self.primarykey = uuid.uuid4()

data_list = [mock() for x in range(2000000)]

def added():
    my_dict_list = {}
    t = time.time()
    new_dict = { item.primarykey: item.name + item.address + item.age for item in data_list }
    print(time.time() - t)

def joined():
    my_dict_list = {}
    t = time.time()
    new_dict = { item.primarykey: ''.join([item.name, item.address, item.age]) for item in data_list }
    print(time.time() - t)

joined() …
Run Code Online (Sandbox Code Playgroud)

python memory string loops python-3.3

3
推荐指数
1
解决办法
336
查看次数

在Python 2.7x中调用u'\ 1234'.decode('utf-8')是什么意思?

今天早些时候,一位同事问我,我无法找到合理的答案.S/O似乎有一些接近的答案,但我无法找到具体回答的东西.

如果我在64位Ubuntu 12.04上运行2.7x解释器,我得到:

>>> u'\u1234'.decode('utf-8')
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
        return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u1234' in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

关于该主题Python文档表明Python将Unicode字符串表示为16或32位整数.当用utf-8解码时,Python是否会尝试读取那些用utf-8编码的8位字符的整数?如果是这样,为什么错误是UnicodeEncodeError而不是UnicodeDecodeError?

我希望能更好地理解这一点.在Unicode字符串上调用decode时采取了哪些步骤?使用已经从utf-8编码解码的utf-8解码字符串的含义我不清楚.

python unicode encoding utf-8 python-2.7

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