我想我找到了一些 C# 和 Ruby 可以做但 Python 做不到的事情
在 C# 中:
for (var i = 0; i < 100; i++)
new Thread(() => { Console.Write(i+" "); }).Start();
Console.ReadLine();
在 ruby 中:
for i in 0...100
Thread.start{
print i + ''
}
end
gets
有什么想法吗?你能用python重写上面的代码吗?输出应该类似于 C# 和 Ruby:有重复的数字。
编辑
输出是打印100次,有重复的数字。如果你定义一个类或者一个新的方法,你只会打印 100 次没有重复的数字。我知道得到重复的数字是没有意义的,我只是想用python实现与C#和ruby相同的效果。
C# 的示例输出:
3 3 3 3 5 7 8 8 10 10 12 12 13 14 17 17 17 18 20 20 22 23 24 24 25 28 28 29 29 3
1 31 33 33 34 36 38 38 38 41 41 41 42 44 45 45 46 49 49 50 50 52 52 55 56 56 56
58 59 59 60 61 64 64 64 66 66 67 68 69 72 72 72 73 74 76 76 78 78 81 81 82 83 84
84 86 86 87 89 89 90 93 94 94 95 95 97 97 99 99 100
Ruby 的示例输出:
99999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999
为什么我要重复的数字:
C# 和 ruby 代码的输出有重复的数字。那是因为,主线程正在改变 i 的值,所以一些子线程可能会打印相同的数字。 主线程和子线程引用同一个变量 i。
有时这很有用:主线程更改变量,子线程都获得更新的变量。
但是我们如何在 Python 中做到这一点?
最佳答案
其实你可以:
>>> import threading
>>> def target():
... print 123
...
>>> threading.Thread(target=target).start()
123
您的示例如下所示:
>>> def target(i):
... print i
...
>>> for i in xrange(100):
... threading.Thread(target=target, args=(i,)).start()
...
0
1
2
3
<and so on>
关于c# - python 中的线程 vs C# vs Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6830458/