c# - python 中的线程 vs C# vs Ruby

标签 c# python ruby multithreading closures

我想我找到了一些 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/

相关文章:

C# : changing listbox row color?

c# - 将结构从 c# 传递到 C dll

python - undefined variable ?

python - Django View 代码有奇怪的行为

ruby - 好的 ruby 外壳?

C# iTunesLib com : AlbumArtist member not accessible with intellisense

c# - VSTO 插件表单关闭处理程序

python - 使用 requirements.txt 中的相对路径通过 pip 安装 tar.gz 文件

ruby-on-rails - Ruby on Rails 中的 Controller 类应该包含什么?

ruby - 无法使用 Ruby 发送终端命令