小编Sha*_*aun的帖子

在MATLAB中对字符串进行排序,如Windows 7,对资源管理器中的文件名进行排序(尊重数字中间字符串)

在MATLAB中对字符串进行排序的最佳方法是什么,尊重可能出现在字符串中间的数字?

以下示例说明了我的问题.401是数字上高于6的值.因此,当按升序排序时,Ie401sp2字符串应列在Ie6字符串之后.在此示例中,请注意如何对包含数字的以下字符串进行排序.

--- --- Matlab的(不选我所希望的方式)
Ie4_01
Ie4_128
Ie401sp2
IE5
Ie501sp2
IE6

--- Windows 7的---(我想MATLAB的排序方法)
Ie4_01
Ie4_128
IE5
IE6
Ie401sp2
Ie501sp2

Windows 7尊重出现在字符串中间的数字的相对值.在Matlab中执行此操作的最佳方法是什么?我试图避免在一个小的切线上重新发明轮子.

sorting string matlab

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

如何将项目放回 queue.Queue

您如何将项目返回到 queue.Queue?如果任务失败,这将在线程或多处理中很有用,这样任务就不会丢失。

queue.Queue.get()文档说该函数可以“从队列中删除并返回一个项目”,但我相信这里使用的“返回”一词是指将项目返回给调用线程的函数,不将其放回项目队列。下面的示例代码证明了这一点,它只是在主线程的第二次queue.Queue.get()调用上无限阻塞,而不是print()在线程中进行调用。

import time
import threading
import queue


def threaded_func():
    thread_task = myqueue.get()
    print('thread_task: ' + thread_task)

myqueue = queue.Queue()
myqueue.put('some kind of task')
main_task = myqueue.get()
print('main_task: ' + main_task)

t = threading.Thread(target=threaded_func)
t.daemon = True
t.start()

time.sleep(5)
myqueue.get()   # This blocks indefinitely
Run Code Online (Sandbox Code Playgroud)

我不得不相信有一种简单的方法可以将任务放回去,那么它是什么?在两个操作中调用task_done()然后put()使用任务将其放回队列不是原子性的,因此可能会导致丢失项目。

一种可能但笨拙的解决方案是尝试再次执行任务,但是您必须添加一些额外的行来处理这种复杂性,而且我什至不确定所有失败的任务是否一定能在其中恢复道路。

python queue multithreading

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

标签 统计

matlab ×1

multithreading ×1

python ×1

queue ×1

sorting ×1

string ×1